10月31日

spring-securityによるユーザー認証

ライブラリの追加
pom.xmlに以下を追加する。

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>4.0.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>4.0.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>4.0.1.RELEASE</version>
</dependency>

設定ファイルを作成する

src/main/resources/spring フォルダに、spring-security.xml を作成する。
まずはXMLで指定したユーザーでログインできるようにする。
ユーザー名: user
パスワード: user

データベースに登録したユーザー認証できるように、あとで修正する。

アクセス許可の設定は、http要素(ハイライト部分)で設定する。

spring-security.xml

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-4.0.xsd">
 
    <http pattern="/" security="none"/>
    <http pattern="/index.jsp" security="none"/>
    <http auto-config="true" >
        <intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
        <form-login />
        <logout />
    </http>
 
    <authentication-manager>
        <authentication-provider>
            <user-service>
                <user name="admin" password="admin" authorities="ROLE_ADMIN" />
                <user name="user" password="user" authorities="ROLE_USER" />
            </user-service>
        </authentication-provider>
    </authentication-manager>
</beans:beans>

すべてのページにアクセスする前にアクセス権限のチェックを実行させるため、web.xml の最後に、フィルターを追加する。

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
 
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

データベースを使用した認証

ユーザーとユーザの権限を管理するためのテーブルを作成する。

CREATE TABLE users(
 user_id bigint NOT NULL identity,
 user_name varchar(50) NOT NULL,
 password varchar(50) NOT NULL,
 enabled tinyint NOT NULL,
 role varchar(100) NOT NULL
);

テーブルにテスト用のユーザーを登録する。

INSERT INTO users ( user_name , password , enabled, role)
   VALUES ( 'taro', 'abcd' , 1, 'ROLE_USER' );

spring-security.xml を、データベースを使った認証をするように書き換える。

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-4.0.xsd">
 
    <http pattern="/" security="none"/>
    <http pattern="/index.jsp" security="none"/>
    <http auto-config="true" >
        <intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
        <form-login />
        <logout />
    </http>
 
    <beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <beans:property name="driverClassName" value="org.hsqldb.jdbc.JDBCDriver" />
        <beans:property name="url" value="jdbc:hsqldb:hsql://localhost/mydatabase" />
        <beans:property name="username" value="sa" />
        <beans:property name="password" value="" />
    </beans:bean>
 
    <!-- ユーザとROLEを定義 -->
    <authentication-manager>
        <authentication-provider>
            <jdbc-user-service data-source-ref="dataSource"
                 users-by-username-query="SELECT user_name, password, enabled FROM users WHERE user_name = ?"
                 authorities-by-username-query="SELECT user_name, role FROM users WHERE user_name = ?" />
        </authentication-provider>
    </authentication-manager>
</beans:beans>

ログインしているユーザー情報の取得

ログインしたユーザー情報を取得するには、コントローラの引数に Principal を追加する。
追加した Princical から getName()メソッドでユーザー名を取得できる。

@RequestMapping(value = "/home", method = RequestMethod.GET)
public String mydata(Model model, Principal p) {
    model.addAttribute("name", p.getName());
    model.addAttribute("title", "Home");
    model.addAttribute("message", "ホーム画面ですよ。");
    return "home";
}

10月28日

課題の登録

やるべきことを思いついたら、担当者未定で課題を登録する。
あとでできると思った人が担当して解決すればよい。

Gitの使い方
マンガでわかるGit 第1話「Gitってなあに?」
各回の最後に次回へのリンクがあるので、最後まで読みましょう。

課題の作り方
何をやったら課題が完了するのか明確にすること。

たとえば、以下のような課題なら、完了がわかりやすい。

  • web.xmlに文字化け対策の設定を追加する
  • mvc-config.xmlにbase-packageの設定を追加する
  • コントローラに URL /hoge で hoge.jsp への遷移を追加する
  • ○○ページ(ロバストネス図でのアイテム)に対応する hoge.jsp を作成する
  • ○○ページに表示する画像を作成する
  • ファビコンを作成する
  • mvc-config.xmlに画像やCSSのフォルダを指定する設定を追加する

10月14日

プロジェクトをGitにアップロードする

リーダーはプロジェクトをGitにアップロードするための準備をする。

参考ページ
http://another.maple4ever.net/archives/2060/

リーダーがBacklogにアップロードしたプロジェクトを、他のメンバーがインポートする。

各自で[Maven]-[プロジェクトの更新]と[実行]-[Maven install]を実行する。

10月7日

チーム開発

Aチーム
・Pacutter

Bチーム
・tktkmaker

Cチーム
・createblog

Dチーム
・mitachannel

Eチーム
・PPAP

今日の課題を作成する。
・ロバストネス図を作成する(2~3画面程度)
 作成したロバストネス図をPNG画像に出力する。
  [ツール]-[図を画像ファイルに出力]-[図をPNG形式で保存]
 保存したPNGファイルをBacklogにアップロードする
 Wikiにロバストネス図を貼り付ける。
・○○画面をデザインする。(画面数分)
 手書きやペイントなどで作成する。
 作成した画像をBacklogにアップロードする。
 Wikiに画面デザインを貼り付ける。

今後の作業の進め方

スタートアップミーティング

朝、10分程度のスタートアップミーティングを行う。
ミーティングで以下の内容を決める。

1日のチーム内の作業分担を決める。
各人がBacklogに課題を登録する。

チーム開発作業

ひとりで難しいときはペアプログラミングで効率を上げる。
課題に書いた内容を実装する。

  • ドキュメント整理(Wikiを活用)
  • JSP作成
  • コントローラ作成
  • エンティティ作成

Wikiで整理するとよさそうな情報

  • ロバストネス図(画面遷移図)
  • 画面デザイン
  • クラス図
  • シーケンス図

12:50ごろから1日のふりかえりを行う

ミーティング後、全員の課題を確認する。
KPT : Keep / Problem / Try

全員の課題の進捗確認。
チームごとのKPTの確認。

10月3日

チームで作成するサービスを決定する

メンバーが少ないチームは、候補を出しておく。

課題
リーダー(いない場合は他の人)が以下の課題を作成する。

  • 作成するサービスを決める(候補を出す)
  • サービスの名前(プロジェクト名)を決める
  • 基本的な画面遷移図(ロバストネス図)を作成する
  • WikiのHomeにサービスの概要を記述する
  • Wikiに画面遷移図ページを作成して画面遷移図を貼り付け、説明を記述する
  • WikiのHomeに画面遷移図のページをリンクする

無料のツール astah community が便利。
astah community v6.9

ロバストネス図、クラス図、シーケンス図などのUML図を作成できる。