如何使用两个弹簧安全

时间:2013-08-15 09:41:14

标签: spring spring-security

我有以下情况

/ drug下的所有内容都是安全的我不希望用户能够查看任何under / drug所以我在我的spring安全配置中有这个规则。

<intercept-url pattern="/drug/**" access="hasRole('ROLE_DRUG')" />

但是,当用户点击/药物时,我希望能够显示访问被拒绝的页面,其中包含有关如何购买此部分或模块的消息,并且我必须在相同的URL下显示访问被拒绝的消息,即/药物/访问-denied

所以我在spring security config中添加了另一条规则

<intercept-url pattern="/drug/access-denied" access="isAuthenticated()"/>
但是春天的安全似乎只考虑其中一个是第一个,改变秩序没有任何区别。并且网址必须是/ drug / access-denied

任何想法???

2 个答案:

答案 0 :(得分:0)

请参阅下面的配置并尝试在您的配置中进行类似操作。 首先,我不明白为什么你写了

<intercept-url pattern="/drug/access-denied" access="isAuthenticated()"/>

访问被拒绝页面中您希望只有经过身份验证的用户才能查看该页面。

使用您的配置,当它发现当时显示拒绝访问页面时您将其称为isAuthenticated()然后再次如果用户未登录并直接尝试访问该页面它会将用户发送到登录页面而不是访问被拒绝页面。

我认为应该是,

<intercept-url pattern="/drug/access-denied" access="permitAll"/>

然后写,

<intercept-url pattern="/drug/**" access="hasRole('ROLE_DRUG')" />

见下文

<security:form-login  login-page="/login.jsp"
    default-target-url="/drug/home"  authentication-failure-handler-ref="authenticationFailureHandler" />

<security:intercept-url pattern="/login.jsp"
    access="permitAll" />


<security:intercept-url pattern="/accessDenied.jsp"
    access="permitAll" />


    <security:intercept-url pattern="/drug/*"
        access="isAuthenticated()" />


    <security:logout logout-url="/j_spring_security_logout" logout-success-url="/login.jsp?logout=success" 
        invalidate-session="true"  />

</security:http>

答案 1 :(得分:0)

如何在intercept-url标记之前将其添加到您的配置中?

<access-denied-handler error-page="/drug/access-denied" />

然后,您可以删除&#34;访问被拒绝&#34;

的拦截网址规则