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源码:权限访问控制是如何做到的?