繁星點(diǎn)點(diǎn)滴滴
2023-09-13 15:22:11
當(dāng)我通過(guò)自定義 bean 激活 Spring Security 時(shí),@PreAuthorize("@mySecurity.check(#car)")有效請(qǐng)求(檢查返回 true)將以 404 結(jié)束,無(wú)效請(qǐng)求將以 200 結(jié)束。沒(méi)有 PreAuthorize 一切正常。授權(quán)是通過(guò)JWT完成的,并且授予的權(quán)限設(shè)置正確。當(dāng)我單步執(zhí)行調(diào)試器時(shí),預(yù)授權(quán)檢查正常工作,返回 true 或 false。我啟用了以下功能:@Configuration@EnableWebSecurity@EnableGlobalMethodSecurity(prePostEnabled = true)public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {Rest 控制器使用以下注釋實(shí)現(xiàn)該方法 @PreAuthorize("@mySecurity.check(#car)") public List<Driver> getAllVersions(String car) {沒(méi)有安全檢查的請(qǐng)求看起來(lái)像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當(dāng)激活 PreAuthorize 并執(zhí)行有效請(qǐng)求時(shí),它似乎部分工作。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貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊
您的控制器是否帶有注釋@RestController?如果沒(méi)有,你需要@ResponseBody 在你的方法上添加注釋
@PreAuthorize("@mySecurity.check(#car)")
@ResponseBody
public List<Driver> getAllVersions(String car) {
如果沒(méi)有這個(gè)彈簧,則會(huì)嘗試加載不存在的實(shí)際視圖 - 404
或者缺少 PathParam 注釋
public List<Driver> getAllVersions(@PathParam("ParamName") String car)
過(guò)去,我在實(shí)現(xiàn)的接口上而不是直接在類上添加注釋時(shí)遇到了一些問(wèn)題。PreAuthorize 做了一些額外的“魔法”,只是一個(gè)想法
添加回答
舉報(bào)
0/150
提交
取消