加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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调用像预期一样.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读