Spring安全自定义会话超时URL

时间:2017-06-27 08:04:03

标签: spring spring-mvc spring-security

目前我正在开发Spring安全应用程序,我需要在会话过期时将用户重定向到自定义锁定页面,该页面仅包含密码字段。 (用户名可能放在登录表单中的隐藏字段中。)我需要传递从UserDetails实例中提取的用户名,并在登录会话超时后重定向到此自定义URL。

我尝试使用concurrency-control -> expired-url,但它没有给我成功的结果。

如果你能提供一些指导来实现这一点,我会非常乐于助人。

这是否可以实现,因为我还需要在authentication-failure-url上进行自定义行为? (当给定的密码不正确时)。

更新1: 我目前的配置:

<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-4.2.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-4.2.xsd">

<http auto-config="true" create-session="always" use-expressions="true" entry-point-ref="authEntryPoint" >
    <form-login
            login-page="/login"
            default-target-url="/home"
            authentication-failure-url="/login?error"
            username-parameter="username"
            password-parameter="password"
            always-use-default-target="true"/>

    <logout invalidate-session="true" logout-success-url="/login" delete-cookies="JSESSIONID"/>

    <session-management session-fixation-protection="newSession" invalid-session-url="/"
                        session-authentication-error-url="/login">
        <concurrency-control session-registry-alias="sessionRegistry" max-sessions="10"
                             expired-url="/lock-screen" error-if-maximum-exceeded="true"/>
    </session-management>

    <intercept-url pattern="/" access="hasRole('ROLE_LOGIN')"/>
    <intercept-url pattern="/profile" access="hasRole('ROLE_LOGIN')"/>
    <intercept-url pattern="/home" access="hasRole('ROLE_LOGIN')"/>

    <access-denied-handler error-page="/403"/>
</http>

<authentication-manager>
    <authentication-provider user-service-ref="userDetailsService">
        <password-encoder ref="passwordEncoder"/>
    </authentication-provider>
</authentication-manager>

<beans:bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
    <beans:constructor-arg name="strength" value="10"/>
</beans:bean>

<beans:bean id="authEntryPoint" class="com.myapp.admin.security.web.authentication.AjaxSupportedLoginUrlAuthenticationEntryPoint"
            scope="singleton">
    <beans:constructor-arg name="loginFormUrl" value="/login"/>
</beans:bean>

我期待这样的事情:

用户登录屏幕: https://i.stack.imgur.com/vTPkF.png

登录后用户处于非活动状态时锁定屏幕: https://i.stack.imgur.com/DY9kG.png

0 个答案:

没有答案