通常定义一些拦截的URL模式与春季安全配置对页面的访问自定义访问规则的Spring Security
<http use-expressions="true">
<intercept-url pattern="/**/secure/**" access="hasRole('ROLE_SECURE_USER')" />
...
</http>
我们现在有网址的那些事先不知道的页面。但是,我们可以编写一段代码来确定是否应该保护特定页面,也就是说,如果页面必须受到保护,我们可以提供返回true的服务。所以我们想要做的是这样的:
<http use-expressions="true">
<intercept decide="@service.mustProtect()" access="hasRole('ROLE_SECURE_USER')" />
...
</http>
这怎么可以用Spring来实现?我们是否必须编写自定义过滤器?你将如何实现这样一个过滤器?
是否有可能在'FilterSecurityInterceptor'前会抛出一个'AccessDeniedException'添加自定义过滤器,如果当前用户是不允许访问该页面? – raymi
当然,好的一点是,'ExceptionTranslationFilter'不关心''AccessDeniedException'被抛出的位置。它不必来自定制的'FilterSecurityInterceptor'。您也可以提供自己的过滤器,并且可能会更容易设置。 – zagyi