我正在使用带有Spring Security的Spring 3.0.3。
所以,我对我正在制作的应用程序有相当宽松的限制。我只想确保一个人可以登录并进行身份验证,以便查看该应用程序。我不想为这个应用程序的每个潜在用户授予角色(可能是成千上万的)。
所以,使用它很好:
<security:intercept-url pattern="/**" access="isFullyAuthenticated()" requires-channel="https"/>
但是现在我希望能够限制人们在需要时使用该应用程序,因此我创建了一个名为ROLE_BANNED的角色,希望我可以为那些有问题的人分配角色。
所以,现在我正在尝试这个:
<security:intercept-url pattern="/**" access="isFullyAuthenticated() and not hasRole('ROLE_BANNED')" requires-channel="https"/>
这似乎最初起作用,但它无法加载我拒绝的页面。我认为它限制了对被拒绝页面的访问。我无法通过控制器加载被拒绝的页面,也无法在WEB-INF中加载jsp。
有人可以告诉我如何允许经过身份验证的用户访问我的所有应用并将具有特定角色的人(ROLE_BANNED)发送到被拒绝的页面吗?
修改 这是我的全部安全性:http设置:
<security:http auto-config="true" access-denied-page="/denied" entry-point-ref="casAuthenticationEntryPoint" use-expressions="true">
<security:intercept-url pattern="/**" access="isFullyAuthenticated() and not hasRole('ROLE_BANNED')" requires-channel="https"/>
<security:intercept-url pattern="/denied" access="IS_AUTHENTICATED_FULLY" filters="none" />
<security:logout logout-url="/logout" logout-success-url="${cas.logoutUrl}" />
<security:session-management session-fixation-protection="none" />
<security:custom-filter after="CAS_FILTER" ref="casAuthenticationFilter"/>
<security:custom-filter before="CHANNEL_FILTER" ref="channelProcessingFilter" />
<security:port-mappings>
<security:port-mapping http="80" https="443" />
</security:port-mappings>
</security:http>
我尝试过使用控制器映射被拒绝页面(/被拒绝),jsp页面(/denied.jsp),甚至是一个简单的html页面(/denied.html),但我得到的每一个都有404。发生这种情况时,我在日志文件中看不到任何内容。
答案 0 :(得分:4)
我最终做了以下事情:
<security:intercept-url pattern="/**" access="isFullyAuthenticated()" requires-channel="https"/>
<security:intercept-url pattern="/banned" access="isFullyAuthenticated() and hasRole('ROLE_BANNED')" requires-channel="https"/>
这意味着您必须为两种情况都登录,但您必须具有BANNED角色才能访问被禁止的页面。
我还添加了一个在每个带有RequestMethod.GET的控制器方法之前运行的方面,它检查用户是否具有BANNED角色,如果是,则将它们重定向到/禁止。
如果有人知道更好的方法,请添加答案。
答案 1 :(得分:0)
正如你所说,我认为你只需要让你的“被拒绝”页面不需要任何安全性来访问,所以只需为该特定页面添加一个拦截网址......
此示例适用于Spring Security 2,但它应该转换为...
<intercept-url pattern="/denied.html" access="IS_AUTHENTICATED_ANONYMOUSLY" filters="none" />
编辑:
你可能还需要使你的javascript,css,图像等也有类似的安全限制豁免,否则你的页面将不会加载除纯文本以外的任何内容。