前回 は、設定ファイル上にログインユーザのIDとPWを記述して認証する方法をみてみました!
今回はいよいよDBからログインID・PWを取得して認証します。
これも設定だけでできます
では早速みてみましょう!
以下のsecurityApplication.xmlファイル以外は前回の設定と同じなので、前回の記事を参照してくださいませー。
【設定ファイル(securityApplication.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:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:sec="http://www.springframework.org/schema/security" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd "> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="org.postgresql.Driver"/> <property name="url"> <value>jdbc:postgresql://localhost/test?useUnicode=true&characterEncoding=utf-8</value> </property> <property name="username" value="user" /> <property name="password" value="pass" /> </bean> <!-- 認証と認可の設定です --> <sec:http auto-config="true" access-denied-page="/403.jsp" > <!-- 認可のURL設定 --> <sec:intercept-url pattern="/secure/sys*" access="ROLE_ADMIN"/> <sec:intercept-url pattern="/secure/usr*" access="ROLE_ADMIN,ROLE_USER"/> <sec:intercept-url pattern="/secure/**" access="IS_AUTHENTICATED_FULLY"/> <sec:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/> <!-- 認証の設定 --> <sec:form-login login-page="/login.jsp" default-target-url="/top.jsp" authentication-failure-url="/error.jsp"/> <sec:logout logout-url="/logout" logout-success-url="/login.jsp" invalidate-session="true"/> <sec:anonymous granted-authority="ROLE_ANONYMOUS"/> </sec:http> <!-- ログインユーザの情報の設定。SQL文を指定してDBから取得する方法もあります。 --> <sec:authentication-provider> <sec:jdbc-user-service data-source-ref="dataSource" users-by-username-query=" SELECT login_id, login_pw, 'true' FROM user WHERE login_id = ?" authorities-by-username-query=" SELECT login_id, role FROM user WHERE login_id = ?" /> </sec:authentication-provider> </beans>
【説明】
前回の記事と違いを見てください。
<beanタグ>
まず、dataSourceのbeanがあります。
これはDBと接続するためです。
ここではサンプルを単純にするため、securityApplicationと同じファイルに記述しています。
実際の開発では、他でもdataSourceは使用するので他のファイルに記述しましょう!
<httpタグ>
次に、httpタグですが、これは前回の記事と同じです。
<authentication-providerタグ>
最後に、本命登場!
authentication-providerの中身のタグが前回と違ってますね!
属性にSQLが記述されていますが、それぞれ、パスワードの認証のためのSQLと
権限のロールを取得するためのSQLです。
それぞれプレースホルダを持っています。
そこには、ログインIDが置換されます。
select文の抽出の順番は決まっているので注意です。
パスワードの認証のためのSQLは、「ユーザID」、「パスワード」、「ユーザの有効性」。
「ユーザの有効性」はログインアカウントを論理削除している場合に使用します。
ここでは論理削除のフィールドがないものとして'true'に設定しています。
ここの値は、"0"か"1"、もしくは、"true"か"false"です。
もうひとつ、
認可のSQL文は、「ユーザID」、「権限」。
たったのこれだけです!
簡単だし、分かりやすいですよね?
ぜひぜひ使って楽をしましょう(^^)
参考:
・実際に認証と認可をWEBにつけるには? (基本編:設定方法)
http://itpro.nikkeibp.co.jp/article/COLUMN/20090224/325394/?ST=develop&P=7