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());
    	}
    }
}

你可能感兴趣的:(杂)