SpringSecurity放行接口之后,接口里拿不到用户信息

导读:本篇文章讲解 SpringSecurity放行接口之后,接口里拿不到用户信息,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

前言

项目使用的是security安全框架,今天打开项目发现有个接口报npe很奇怪。于是看了下是SecurityContextHolder获取用户信息时候获取不到用户信息了。这个情况以前没有出现过,所以问了下我们项目组长,他说有没有可能是放行接口的原因。为此我专门研究了一下~

分析原因

我们的放行方式是:

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/css/**","/js/**","/index.html","/img/**","/fonts/**","/favicon.ico","/verifyCode");
}

其实我也一直没搞清楚,这种放行方式和permitAll放行有什么区别?

正常这样配置是没有问题的。
如果你很不巧,把登录请求地址放进来了,那就 gg 了。虽然登录请求可以被所有人访问,但是不能放在这里(而应该通过允许匿名访问的方式来给请求放行)。如果放在这里,登录请求将不走 SecurityContextPersistenceFilter 过滤器,也就意味着不会将登录用户信息存入 session,进而导致后续请求无法获取到登录用户信息。

解决方法

就是在上面以匿名访问的形式放行就解决了!代码我就不贴了,因为我手里没有代码,就是用annou。。。什么的去放行

@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.formLogin() // 表单方式
                .and()
                /**就在这写**/
                .authorizeRequests() // 授权配置
                .anyRequest()  // 所有请求
                .authenticated(); // 都需要认证
    }
}

参考

https://blog.csdn.net/u012702547/article/details/105237938

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/16324.html

(0)
小半的头像小半

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!