错误描述:

        用PostMan第一次访问登录接口【加入了白名单】正常,再点击登录,报403错误

错误如下:

{
        "timestamp": "2022-06-29 11:20:48+08:00",
        "status": 403,
        "error": "Forbidden",
        "message": "",
        "path": "/api/login.json"
 }

 看下spring security的核心配置代码:

protected void configure(HttpSecurity httpSecurity) throws Exception {
        
        httpSecurity
                // CSRF禁用
                .csrf().disable()
                // 对于登录login 注册register  允许匿名访问
                .antMatchers("/**/login.json", "/register").anonymous()
                .anyRequest().authenticated();
}

错误原因:

.antMatchers("/**/login.json", "/register").anonymous()

 1、anonymous是匿名访问

 2、spring security对匿名访问的定义可能很神奇,你没登录前,访问白名单接口,这个时候你是没有身份认证的,也就是匿名,当你登录认证后,再次访问这类接口,这个时候你是有身份的,不再是匿名,配置的白名单是给匿名用户访问的,所有导致403错误!~~~~晕

解决办法:

anonymous【匿名】替换成permitAll【任何人都可以访问】即可

protected void configure(HttpSecurity httpSecurity) throws Exception {
        
        httpSecurity
                // CSRF禁用
                .csrf().disable()
                // 对于登录login 注册register  允许任何人都能直接访问
                .antMatchers("/**/login.json", "/register").permitAll()
                .anyRequest().authenticated();
}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐