0

春のセキュリティでremember-meサービスを設定するにはどうすればよいですか.spring3.0 + hibernate3+ struts2を使用しています.私は以下のように試しました.

login.jsp

<input type="checkbox" name="_spring_security_remember_me"/>remember-me

applicationContext-security.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:s="http://www.springframework.org/schema/security"
        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.0.xsd
          http://www.springframework.org/schema/security
          http://www.springframework.org/schema/security/spring-security-3.0.3.xsd">



    <description>SpringSecurity安全配置</description>

    <!-- http安全配置 -->
    <s:http auto-config="true" use-expressions="true" >
        <s:intercept-url pattern="/css/**" filters="none" />
        <s:intercept-url pattern="/img/**" filters="none" />
        <s:intercept-url pattern="/js/**" filters="none" />

        <s:intercept-url pattern="/account/user!save*" access="hasAnyRole('ROLE_修改用户')" />
        <s:intercept-url pattern="/account/user!delete*" access="hasAnyRole('ROLE_修改用户')" />
        <s:intercept-url pattern="/account/user*" access="hasAnyRole('ROLE_浏览用户')" />
        <s:intercept-url pattern="/account/role!save*" access="hasAnyRole('ROLE_修改角色')" />
        <s:intercept-url pattern="/account/role!delete*" access="hasAnyRole('ROLE_修改角色')" />
        <s:intercept-url pattern="/account/role*" access="hasAnyRole('ROLE_浏览角色')" />

        <s:form-login login-page="/login.action" default-target-url="/" authentication-failure-url="/login.action?error=true" />
        <s:logout logout-success-url="/" />
        <s:remember-me/>
    </s:http>

    <!-- 认证配置, 使用userDetailsService提供的用户信息 -->
    <s:authentication-manager erase-credentials="false">

        <s:authentication-provider user-service-ref="userDetailsService">
            <s:password-encoder hash="plaintext" />
        </s:authentication-provider>
    </s:authentication-manager>

    <!-- 项目实现的用户查询服务 -->
    <bean id="userDetailsService" class="net.top.system.service.account.UserDetailsServiceImpl" />
</beans>

しかし、まったく役に立ちません。アプリケーションで他に何を設定する必要がありますか。

4

1 に答える 1

0

Spring ですでに保護されているアプリケーションを作成するには、XML に以下を追加する必要があります。

<sec:http authentication-manager-ref="authenticationManager">
    <sec:intercept-url pattern="/secure/**" access="ROLE_USER" />
       <sec:form-login/>
    <sec:custom-filter … />

    <sec:remember-me 
        data-source-ref="dataSource"
        user-service-ref="userDetailsService"/>
</sec:http>

「data-source」の使用は「必須」ではありませんが、実際には JDBC 永続トークンを使用することを宣言していることに注意してください。(この場合、Spring は PersistentTokenBasedRememberMeServices で動作します。) もちろん、データ ソース Bean は XML で宣言する必要があります。

Spring で文書化されているように、persistent_logins という名前のテーブルが DB に存在する必要があります。

「userDetailsS​​ervice」は、ユーザーとパスワードが宣言されている UserService Bean への参照です。XML 内にある場合もあれば、DB を指す場合もあります。

実行時に、Spring は SPRING_SECURITY_REMEMBER_ME_COOKIE( ) という Cookie を作成します。「JSESSION」クッキーで見られます。JSESSION を削除すると (ブラウザを再度開くのと同じように、まったく新しいセッションを開くことを意味します)、「remember me」Cookie は最後のログインを記憶し、新しい JSESSION を作成します。

HTH :-)

于 2012-12-15T18:19:00.290 に答える