java – Spring Security的类型级别上的@PreAuthorize不能在方法级别被覆盖

前端之家收集整理的这篇文章主要介绍了java – Spring Security的类型级别上的@PreAuthorize不能在方法级别被覆盖前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图用类型级别的@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调用像预期一样.

猜你在找的Java相关文章