我只是 Spring Security 的初学者,但我想知道是否可以以我可以使用 、 和其他注释的方式@PreAuthorize
配置@PostAuthorize
keycloak @Secured
。例如,我keycloak-spring-security-adapter
在我的简单 Spring Rest webapp 中配置了 Spring Security,以便我可以访问控制器中的 Principal 对象,如下所示:
@RestController
public class TMSRestController {
@RequestMapping("/greeting")
public Greeting greeting(Principal principal, @RequestParam(value="name") String name) {
return new Greeting(String.format(template, name));
}
...
}
但是当我尝试这个时(只是一个例子,实际上我想在授权之前执行自定义 EL 表达式):
@RestController
public class TMSRestController {
@RequestMapping("/greeting")
@PreAuthorize("hasRole('ADMIN')")
public Greeting greeting(Principal principal, @RequestParam(value="name") String name) {
return new Greeting(String.format(template, name));
}
...
}
我得到例外:
org.springframework.security.authentication.AuthenticationCredentialsNotFoundException:在 SecurityContext 中找不到 Authentication 对象
在我的 spring 安全配置中,我启用了全局方法安全性:
我需要什么才能使这个 Spring 安全注释起作用?是否可以在这种情况下使用此注释?