java – Spring Security的类型级别上的@PreAuthorize不能在方法
发布时间:2020-12-14 17:46:10 所属栏目:Java 来源:网络整理
导读:我试图用类型级别的@PreAuthorize注释保护Controller,并尝试通过使用不同的@PreAuthorize注释某些方法来覆盖该行为.然而,问题是 Spring首先评估方法注释(grant access),然后评估类注释(拒绝访问). 有没有办法扭转这个订单?我还没弄清楚. 编辑: 在方法级别,
我试图用类型级别的@PreAuthorize注释保护Controller,并尝试通过使用不同的@PreAuthorize注释某些方法来覆盖该行为.然而,问题是
Spring首先评估方法注释(grant access),然后评估类注释(拒绝访问).
有没有办法扭转这个订单?我还没弄清楚. 编辑: 在方法级别,我只想授予对非注册用户的访问权限: @PreAuthorize("isAnonymous()") @RequestMapping(value = "/create",method = RequestMethod.GET) public String renderCreateEntity(ModelMap model) { return userService.renderCreateEntity(model); } 但是,该控制器的标准应该是允许完全认证的用户: @Controller @RequestMapping(value = "/user") @PreAuthorize("isFullyAuthenticated()") public class UserController { [...] } 当调试逐步通过应用程序,我看到isAnonymous()被先评估,然后isFullyAuthenticated(),从而导致访问权限的授予,并立即拒绝访问. 解决方法
感谢您的所有回覆.
然而,答案是完全不同的:) 我把这个放在这里,万一别人有同样的问题. 我在@InitBinder注释方法中注册了一个自定义验证器.此绑定方法称为控制器上请求的方法调用.而且由于此绑定方法没有使用@PreAuthorize注释,所以请求被拒绝. 解决方案是注释绑定方法,如下所示: @InitBinder @PreAuthorize("permitAll") public void initBinder(WebDataBinder binder) { binder.setValidator(validator); } 然后,该方法从我的OP调用像预期一样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读