Security禁用session

Posted jazon@

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Security禁用session相关的知识,希望对你有一定的参考价值。

Security禁用Seesion

  • 调用登录接口认证用户名及密码,成功后返回token(JWT),前端拿到这个token后根据前文的鉴权方式进行。
  • 服务端对后续请求在过滤链中(认证过滤器前的过滤器)新增JWT的验证,从JWT中提取用户名并生成userInfo然后利用下面的代码,security自然会认证通过,该实现原理和SecurityContextPersistenceFilter一样。点击查看原理
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userInfo, null, userInfo.getAuthorities());		SecurityContextHolder.getContext().setAuthentication(authentication);
  • 上诉方式因为要使用的是token方式,不希望生成session。检查一下几个地方
一、security的session生成策略改为security不主动创建session即STALELESS
httpSecurity.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
二、检查代码中是否有调用request.getSession()

在我们的项目中,自定义了session策略,当检测到http头中使用了token便不调用sessionRegistry进行注册新会话。如下:

public class MySessionAuthenticationStrategy implements SessionAuthenticationStrategy 
    private final SessionRegistry sessionRegistry;

    public void onAuthentication(Authentication authentication, HttpServletRequest request,
            HttpServletResponse response) 
        if (request.getHeader("token") == null) 
            sessionRegistry.registerNewSession(request.getSession().getId(), authentication.getPrincipal());
    	
    

以上是关于Security禁用session的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security源码:权限访问控制是如何做到的?

spring security控制session

如何禁用 spring-security 登录屏幕?

Spring Security入门(3-8)Spring Security获取session中的UserDetail

Spring Security 梳理 - session

Spring Security Concurrent Session:未能使“max-sessions”字段可配置