如何在Spring Security中引发自定义AccessDeniedException?

时间:2018-09-25 09:54:11

标签: java spring-security

我是Spring Security的新手。当config.assets.compile = true #set to false by default config.assets.digest = true 发生时,我想说明响应中拒绝访问的原因。

例如,我想显示类似“您不能拥有该对象,因为您不是所有者”或“您不能创建新对象,因为您的帐户已被暂停”之类的内容。我希望此类消息通过自定义AccessDeniedException进行传播,例如AccessDeniedExceptionNotOwnerException

我正在尝试使用自定义AccountSuspendedException的{​​{1}}注释,但是似乎没有办法将这种原因从我的@PreAuthorize传播到响应中。

在Spring Security中有什么方法可以实现这一目标?谢谢!

1 个答案:

答案 0 :(得分:0)

我想Spring Security不会建议甚至不允许我们抛出自定义AccessDeniedException

根据本GitHub issue中的讨论,Luke Taylor(Spring Security的维护者)说:

  

通常仅在经过身份验证的用户尝试访问不应访问的内容时才调用AccessDeniedHandler。应用程序的正常流程应阻止它们执行此操作,因此只有在它们故意操纵URL(或其他内容)以试图绕过它们的正常边界或应用程序中存在错误时,才应发生这种情况。

由于正常访问中不应发生“拒绝访问”,因此不必自定义异常。