为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Boot 和 Spring Security 在有效登录时返回 404

Spring Boot 和 Spring Security 在有效登录时返回 404

繁星点点滴滴 2023-09-13 15:22:11
当我通过自定义 bean 激活 Spring Security 时,@PreAuthorize("@mySecurity.check(#car)")有效请求(检查返回 true)将以 404 结束,无效请求将以 200 结束。没有 PreAuthorize 一切正常。授权是通过JWT完成的,并且授予的权限设置正确。当我单步执行调试器时,预授权检查正常工作,返回 true 或 false。我启用了以下功能:@Configuration@EnableWebSecurity@EnableGlobalMethodSecurity(prePostEnabled = true)public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {Rest 控制器使用以下注释实现该方法    @PreAuthorize("@mySecurity.check(#car)")    public List<Driver> getAllVersions(String car) {没有安全检查的请求看起来像2019-09-30 13:34:22.306 DEBUG 26204 --- [nio-8080-exec-3] o.s.web.servlet.DispatcherServlet        : Completed 200 OK2019-09-30 13:34:42.042 DEBUG 26204 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet        : GET "/api/v1/car/foobar", parameters={}...2019-09-30 13:34:42.049 DEBUG 26204 --- [nio-8080-exec-4] m.m.a.RequestResponseBodyMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/json, application/*+json]2019-09-30 13:34:42.050 DEBUG 26204 --- [nio-8080-exec-4] m.m.a.RequestResponseBodyMethodProcessor : Writing [{  "id": "hi",  "name": "hi",  "isActive": false}]2019-09-30 13:34:42.052 DEBUG 26204 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet        : Completed 200 OK当激活 PreAuthorize 并执行有效请求时,它似乎部分工作。2019-09-30 13:44:22.597 DEBUG 7400 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : GET "/api/v1/car/foobar", parameters={}...2019-09-30 13:44:28.912 DEBUG 7400 --- [nio-8080-exec-1] o.s.w.s.v.ContentNegotiatingViewResolver : Selected '*/*' given [*/*]2019-09-30 13:44:28.938 DEBUG 7400 --- [nio-8080-exec-1] o.s.w.servlet.view.InternalResourceView  : View name '/api/v1/car/foobar2', model {configurationVersionList=[{  "id": "bar",  "name": "bar",  "isActive": false}, {  "id": "foo",  "name": "foo",  "isActive": false}]}
查看完整描述

2 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

您的控制器是否带有注释@RestController?如果没有,你需要@ResponseBody 在你的方法上添加注释


@PreAuthorize("@mySecurity.check(#car)")

@ResponseBody

public List<Driver> getAllVersions(String car) {

如果没有这个弹簧,则会尝试加载不存在的实际视图 - 404


或者缺少 PathParam 注释


public List<Driver> getAllVersions(@PathParam("ParamName") String car)

过去,我在实现的接口上而不是直接在类上添加注释时遇到了一些问题。PreAuthorize 做了一些额外的“魔法”,只是一个想法


查看完整回答
反对 回复 2023-09-13
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

尝试将 @ResponeBody 作为控制器类中的方法



查看完整回答
反对 回复 2023-09-13
  • 2 回答
  • 0 关注
  • 67 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信