90-1.認証手形発行所を複数設定するサンプル
(Security2.x系)
概要
Spring Security 2.x系のサンプルです。
Springで用意されているクラスをデフォルトと違う使い方をしたいときにどうすればよいか?
そのサンプルと思っていください。
サンプル全体の説明もお読みください。
目標
まずはゴールを示します。
デフォルトでは、1つの認証手形発行所(AuthenticationProvider)を設定します。
しかし、例えば複数のシステムがあり、どれかのシステムにアカウントが登録されていればログインさせたい場合があるかもしれません。
その場合は、複数の認証手形発行所を設定する必要があります。
こんなときはどう設定したらよいでしょうか?
【実装】
ここではDBを用意するとサンプルとして大変なので、ファイルベース(オンメモリ)のID/PWを使用することにします。
実際のサンプル
Spring設定ファイル(/WEB-INF/spring/applicationContext-security-provs.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-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-2.0.1.xsd">
<!-- SpringSecurityのメイン設定
-->
<sec:http access-denied-page="/403.jsp" path-type="ant" auto-config="false">
<sec:intercept-url pattern="/error.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<sec:intercept-url pattern="/login-provs.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<sec:intercept-url pattern="/403.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<sec:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY"/>
<sec:form-login login-page="/login-provs.jsp" default-target-url="/top.jsp"
authentication-failure-url="/login-provs.jsp?error=true"/>
<sec:logout logout-url="/logout" logout-success-url="/login-provs.jsp" invalidate-session="true"/>
<sec:anonymous granted-authority="ROLE_ANONYMOUS"/>
</sec:http>
<!-- 認証手形発行所1 -->
<sec:authentication-provider>
<sec:user-service id="userService1">
<sec:user name="taro" password="taro" authorities="ROLE_ADMIN"/>
<sec:user name="hanako" password="hanako" authorities="ROLE_READ"/>
</sec:user-service>
</sec:authentication-provider>
<!-- 認証手形発行所2 -->
<sec:authentication-provider>
<sec:user-service id="userService2">
<sec:user name="kanako" password="kanako" authorities="ROLE_ADMIN"/>
</sec:user-service>
</sec:authentication-provider>
</beans>
実はproviderは複数設定できます。
設定されたproviderは順番に呼ばれていきます。
そしてデフォルトでは、最初に認証OKになって発行された認証手形が有効になります。
ですので、上記のように単純にauthentication-providerを増やせばいいだけです。
別に、オンメモリのものだけでなく、DBも使用できます。
Created Date: 2013/07/07