我是Spring Security的新手,我正在开发登录、注销和会话超时特性。我已经参考本文档配置了我的代码。我的代码如下所示:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/admin/**")
.access("hasRole('ROLE_USER')").and().formLogin()
.loginPage("/login").failureUrl("/login?error")
.usernameParameter("username")
.passwordParameter("password")
.and().logout().logoutSuccessUrl("/login?logout").and().csrf();
http.sessionManagement().maximumSessions(1).expiredUrl("/login?expired");
}
重写类抽象安全性Web应用程序初始化程序
import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
public class SpringSecurityInitializer extends AbstractSecurityWebApplicationInitializer {
@Override
public boolean enableHttpSessionEventPublisher() {
return true;
}
}
我需要澄清我是否做得正确,如果它看起来不错,那么我需要在哪里设置会话超时。我做它完全基于注解。
8条答案
按热度按时间qlzsbp2j1#
如果您使用的是JavaConfig而不想使用XML,则可以创建一个
HttpSessionListener
并使用getSession().setMaxInactiveInterval()
,然后在Initializer
中添加onStartup()
中的侦听器:然后在初始化程序中:
vu8f3i0k2#
我可以通过在web.xml中添加以下配置来解决上述问题。任何更好的方法都将被接受。
mbzjlibv3#
当使用application.properties设置属性
server.session.timeout=
时,值以秒为单位。qzwqbdag4#
在Spring Security中配置会话超时时间(maxInactiveInterval)的不同方法。
1.通过在web.xml中添加会话配置(来自raju vaishnav的回答)
2.通过创建HttpSessionListener的实现并将其添加到servlet上下文中。(来自munilvc的答案)
3.通过在Spring安全配置中注册自定义AuthenticationSuccessHandler,并在onAuthenticationSuccess方法中设置会话最大非活动间隔。
这种实现具有以下优点,
1.登录成功后,您可以为不同的角色/用户设置不同的maxInactiveInterval值。
1.登录成功后,您可以在会话中设置用户对象,因此可以从会话中访问任何控制器中的用户对象。
缺点:您不能为ANONYMOUS用户(未验证的用户)设置会话超时
创建验证成功处理程序处理程序
注册成功处理程序
以Java配置方式
以xml配置方式
工作代码以my github repository形式提供工作代码以两种形式提供
1. XML config way of implementation
2. JAVA config way of implementation
如果您想有自动注销功能和计时器,当会话即将到期时显示,如果用户正在填写表单但没有提交,那么用户可以通过单击'保持会话活动'按钮来延长会话如果您想实现自动注销,请参考stack overflow answer on auto logout on session timeout希望这会有所帮助
ifmq2ha25#
在应用程序属性中,使用**
server.servlet.session.timeout=1m
**(如果未指定持续时间后缀,则将使用秒。)默认情况下为30分钟。
vx6bjr1n6#
我在UsernamePasswordAuthenticationFilter的子类中处理了它。您可以通过以下方式获得用户名-
应用用户检查并相应地设置超时,例如-
wwodge7n7#
在
application.proprites
中添加以下内容brqmpdu18#
这将起作用: