スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Spring MVC Spring Securityを使ってみる(その2)

前回の記事で、Spring Securityを使ってログイン画面を作成したが、今回はデータベースに格納したユーザー情報で認証してみる。

■前回の記事
Spring MVC Spring Securityを使ってみる

◎動作検証にあたっての各バージョンは以下の通り
  • SpringFramework 3.2.8.RELEASE
  • Java 1.7
  • Tomcat 7.0

1.Mavenのpom.xml



org.springframework
spring-jdbc
3.2.8.RELEASE


com.h2database
h2
1.4.178


今回は、「PostgreSQL」や「MySQL」といった本格的なDBではなく、Javaライブラリだけで動作する「H2」を使う。
データベースの起動・停止が不要で、データをメモリ上に保存でき、検証用で使うには重宝する。

2.security.xml


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sec="http://www.springframework.org/schema/security"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">

<sec:http auto-config="true">
<sec:intercept-url pattern="/book/**" access="ROLE_ADMIN"/>
<sec:form-login login-page="/login.jsp" default-target-url="/book"
authentication-failure-url="/login.jsp?error=true"/>
<sec:logout logout-url="/logout"
logout-success-url="/login.jsp" />
<sec:access-denied-handler error-page="/error.jsp" />
</sec:http>

<sec:authentication-manager>
<sec:authentication-provider>
<sec:jdbc-user-service data-source-ref="dataSource"/>
</sec:authentication-provider>
</sec:authentication-manager>
</beans>

前回との違いは、「sec:user-service」タグから「sec:jdbc-user-service」タグに変更して、「dataSource」を参照するだけ。

3.datasource-config.xml


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd">

<!-- jdbc -->
<jdbc:embedded-database id="dataSource" type="H2">
<jdbc:script location="classpath:sql/login.sql"/>
</jdbc:embedded-database>

</beans>

「jdbc:embedded-database」タグにid(dataSourceが一般的かと思われる)とデータベースの種類(「H2」「DERBY」「HSQL」)を定義する。
そして、ここが便利なところで「jdbc:script」タグでデータベース起動時に実行するSQLスクリプトファイルを定義できる。(CREATEやINSERT文を使って初期データを生成できる)

4.application-config.xml


<import resource="classpath:spring/datasource-config.xml"/>

application-config側でインポートすることにして、web.xmlの「context-param」タグでは「datasource-config.xml」を定義していない。

5.login.sql


CREATE TABLE USERS (
USERNAME VARCHAR(10) NOT NULL,
PASSWORD VARCHAR(32) NOT NULL,
ENABLED SMALLINT,
PRIMARY KEY(USERNAME)
);

CREATE TABLE AUTHORITIES (
USERNAME VARCHAR(10) NOT NULL,
AUTHORITY VARCHAR(10) NOT NULL,
FOREIGN KEY(USERNAME) REFERENCES USERS
);

INSERT INTO USERS (USERNAME,PASSWORD,ENABLED) VALUES ('testadmin','password1',1);
INSERT INTO USERS (USERNAME,PASSWORD,ENABLED) VALUES ('testuser','password2',1);

INSERT INTO AUTHORITIES (USERNAME,AUTHORITY) VALUES ('testadmin','ROLE_ADMIN');
INSERT INTO AUTHORITIES (USERNAME,AUTHORITY) VALUES ('testuser','ROLE_GUEST');

用意するテーブルは「USERS 」「AUTHORITIES 」の2つ。

以上で、前回の記事と同等のことが実現できた。「PostgreSQL」や「MySQL」を使えば、DB接続情報等、設定すべき内容が増えることが想定されるが、Spring Security側の設定は、思っていた以上にシンプルだった。

■過去のSpring関連記事
Spring関連記事 Index

■Spring Securityに関する追加記事
Spring MVC ログインユーザー権限によって表示を切り替える
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

bookmount8

Author:bookmount8
システムエンジニア。サーバーサイドでjavaを扱うことが多い。最近は、ミドルやフロント周りも関心あり。

最新記事
カテゴリ
検索フォーム
最新コメント
月別アーカイブ
これまでの訪問者数
ブロとも申請フォーム

この人とブロともになる

RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。