关于若依框架里接口跳过token的问题!(语言-java)

项目里需要给一个接口(/system/user/profile/updatePwd)跳过token验证,项目使用的是springboot若依框架,网上查了很多办法,在SecurityConfig类里加上匿名访问结果不行报错,然后尝试用permitAll代替匿名访问还是一样报错,还去application.yml文件中添加了放行代码,还是报错,求问有什么其他解决办法吗,由于我是干后端的,前端是不是也需要做些更改呀,图片里是application.yml文件中添加ignore的部分,同时附上postman里的报错信息以及Security类的代码,谢谢各位了

img

img

img

报错信息:
    "code": 401,
    "msg": "认证失败,无法访问系统资源",
    "data": null

若依白名单
SecurityConfig类里面配置
把你需要过滤的加在antMatchers
我这边就是这样做的,可以用

img


你的挪到上面
.antMatchers("/system/user/profile/updatePwd").permitAll()

根据报错信息来看,似乎请求仍然需要认证才能访问,可能需要再检查一下代码和配置文件中的问题。

下面是一些可能的解决方案:

确保SecurityConfig类中添加的匿名访问配置正确

在SecurityConfig类中添加匿名访问配置时,需要确保配置的路径与接口路径完全匹配,且配置的顺序正确,具体可以参考以下代码:

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/system/user/profile/updatePwd");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .anyRequest().authenticated()
            .and()
            .csrf().disable()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}


其中,configure(WebSecurity web)方法用于配置不需要进行安全检查的路径,而configure(HttpSecurity http)方法则用于配置安全策略。

确保请求中未携带token

如果请求中携带了token,就算配置了匿名访问也会被认为已经认证通过。可以使用Postman等工具,或者在浏览器中打开接口路径,检查请求头部中是否携带了token。

检查前端代码中是否正确处理了token

如果前端代码中有处理token的逻辑,也需要确保在请求该接口时未携带token,或者在请求头部中添加相应的处理逻辑,例如在请求头部中添加"Authorization: Bearer null"。

希望这些方案可以帮到你解决问题。

有自定义filter吧,只有spring security,只要配置类放行即可,或者说用WebSecurity放行,这相当于独立的拦截链并且优先级较高

img

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据您提供的信息,401错误表示未经授权访问,这意味着Spring Security无法验证您的请求,因此拒绝访问。

为了跳过Spring Security的token验证,您可以将目标接口添加到WebSecurityConfig文件中的configure方法的匿名访问列表中。以下是一个示例:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/system/user/profile/updatePwd").anonymous()
            .anyRequest().authenticated()
            .and().csrf().disable();
    }
}

在这个配置中,/system/user/profile/updatePwd这个接口是可以匿名访问的。.anyRequest().authenticated()表示所有其他接口需要登录后才能访问,防止未授权访问。

这样做应该可以解决您的问题。如果未解决,请提供更多信息或代码以供进一步检查。
如果我的回答解决了您的问题,请采纳!