我已经成功创建了一个自定义AccessDecisionVoter类,并通过XML将其绑定到我的Web应用程序中。
现在我想要在每次加载页面时调用它,以确保允许用户访问该特定页面,而不仅仅是整个网站。看起来我的选民只是在我登录时才被调用。
如何在每个页面调用它?
<security:http auto-config="true"
use-expressions="true"
access-decision-manager-ref="accessDecisionManager">
<security:intercept-url pattern="/login" access="permitAll" />
<security:intercept-url pattern="/statics/*" access="permitAll" />
<security:form-login login-page="/login"
authentication-failure-url="/login?error=true"
default-target-url="/index" />
<security:logout invalidate-session="true"
logout-success-url="/loggedout"
logout-url="/logout" />
</security:http>
<bean id="accessDecisionManager"
class="org.springframework.security.access.vote.UnanimousBased">
<property name="decisionVoters">
<list>
<bean class="com.tarigma.gem.security.DBVoter" />
</list>
</property>
</bean>
答案 0 :(得分:0)
除非安全链中的先前过滤器被授予访问权限,否则将调用每个请求。
您是否按照请求验证配置了Spring。首先将此过滤器放在链中。记住我的大部分时间都会覆盖这一点。查看配置要检查的资源。 您必须配置执行安全性的uris。
<security:intercept-url pattern="/**" access="permitAll" />
您使用的是注释吗?
<global-method-security secured-annotations="enabled"
access-decision-manager-ref="accessDecisionManager"/>
答案 1 :(得分:0)
您有两种选择,这在很大程度上取决于您想要的行为。
authorize
标记保护您关注的每个页面,并检查角色(或者您定义的任何字符串)您的选民可以投票。其中任何一个都可以正常工作,我认为你不会在基线Spring Security中发现任何总是会对每个请求对用户进行身份验证的内容 - 这是框架中的一个操作假设,一旦用户通过身份验证并且他们的确定授权(在登录时),它可能不会改变。
希望有所帮助!