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());
    	}
    }
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Spring Security 2.7及以上版本中,WebSecurityConfigurerAdapter已经被废弃。相反,现在推荐使用bean注入的方式进行配置。你可以参考官方文档:https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter#ldap-authentication 来了解更多详细信息。在SecurityConfig中,加载SpringSecurityAdminConfig即可。你可以使用@EnableWebSecurity注解来启用Web安全配置。在SecurityConfig类中,通过@Resource注解注入SpringSecurityAdminConfig,并通过@Bean注解创建SecurityFilterChain bean。在configure(HttpSecurity http)方法中,你可以通过以下代码配置安全性: ``` http .csrf(AbstractHttpConfigurer::disable) //禁用CSRF保护 .sessionManagement(AbstractHttpConfigurer::disable) //禁用Session管理 .authorizeHttpRequests(auhtor-> auhtor .antMatchers("/admin/code","/admin/login").permitAll() //设置允许匿名访问的URL .anyRequest().authenticated() //其余请求需要认证 ); http.apply(springSecurityAdminConfig); //应用SpringSecurityAdminConfig配置 return http.build(); ``` 然后,你需要创建一个名为SpringSecurityAdminConfig的配置类,该类用于管理后台的用户名和密码登录。你可以参考以下示例代码: ``` @Component public class SpringSecurityAdminConfig extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity> { @Override public void configure(HttpSecurity http) throws Exception { AdminUsernamePasswordAuthenticationFilter adminUsernamePasswordAuthenticationFilter = new AdminUsernamePasswordAuthenticationFilter(); adminUsernamePasswordAuthenticationFilter.setAuthenticationManager(http.getSharedObject(AuthenticationManager.class)); http.addFilterAt(adminUsernamePasswordAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); //替换UsernamePasswordAuthenticationFilter } } ``` 这样就可以通过bean注入的方式配置Spring Security 2.7及以上版本了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [springboot2.7整合springSecurity](https://blog.csdn.net/gzmyh/article/details/129267449)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值