当我通过自定义 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 做了一些额外的“魔法”,只是一个想法
添加回答
举报
0/150
提交
取消