@ preauthorize at the type level of Java – spring security cannot be overridden at the method level

I try to protect the controller with a type level @ preauthorize annotation and try to override this behavior by using different @ preauthorize annotation methods However, the problem is that spring first evaluates method annotations (grant access) and then class annotations (access denied)

Is there any way to reverse this order? I haven't figured it out yet

Edit:

At the method level, I only want to grant access to unregistered users:

@PreAuthorize("isAnonymous()")
@RequestMapping(value = "/create",method = RequestMethod.GET)
public String renderCreateEntity(ModelMap model) {
    return userService.renderCreateEntity(model);
}@H_502_9@ 
 

但是,该控制器的标准应该是允许完全认证的用户:

@Controller
@RequestMapping(value = "/user")
@PreAuthorize("isFullyAuthenticated()")
public class UserController { [...] }@H_502_9@ 
 

当调试逐步通过应用程序,我看到isAnonymous()被先评估,然后isFullyAuthenticated(),从而导致访问权限的授予,并立即拒绝访问.

Solution

Thank you for all your replies

I'll put this here in case someone else has the same problem

I registered a custom validator in the @ initbinder annotation method This binding method is called the method call requested on the controller Moreover, the request was rejected because this binding method did not use the @ preauthorize annotation

The solution is annotation binding, as follows:

@InitBinder
@PreAuthorize("permitAll")
public void initBinder(WebDataBinder binder) {
    binder.setValidator(validator);
}@H_502_9@ 
 

然后,该方法从我的OP调用像预期一样.

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>