用于访问被拒绝处理程序的spring security 404

时间:2013-12-23 05:39:35

标签: spring spring-security

我正在尝试设置我的spring mvc webapp以使用spring access-denied-handler但是无法让它捕获错误。使用我的配置,看起来spring正在向访问被拒绝的处理程序发送,但由于某种原因,当我的访问被拒绝处理程序被执行时,我得到404未找到。 HTTP状态404 - / accessDenied。

有人可以帮助我找出这里可能出现的问题吗?我肯定有一个名为accessDenied.jsp的jsp


              

<!-- Resources -->
<intercept-url pattern="/resources/css/*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/resources/images/*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/resources/js/*" access="IS_AUTHENTICATED_ANONYMOUSLY" />

<!-- Pages -->  
<intercept-url pattern="/login" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/accessDenied" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/welcome" access="ROLE_LEVEL7" />
<intercept-url pattern="/priceOverride" access="ROLE_LEVEL7" /> 

<!-- Error handlers -->
<access-denied-handler ref="accessDeniedHandler" />  

然后在我的mvc-dispatcher-servlet中......

    <context:component-scan base-package="com.company.reporting.controller" />
   <bean id="accessDeniedHandler" 
        class="com.company.reporting.handler.ReportingAccessDeniedHandler">
        <property name="accessDeniedUrl" value="/accessDenied" />
   </bean>
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/pages/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>
    <mvc:resources mapping="/resources/**" location="/resources/" />    
    <mvc:annotation-driven />

enter image description here

感谢

2 个答案:

答案 0 :(得分:1)

创建accessDeniedHandler bean是不够的。这个bean只会将您的请求重定向到/ accessDenied URL。您还应该使用以下代码创建AccessDeniedController(或者将其命名为smth):

@Controller
public class AccessDeniedController {

    @RequestMapping(value = "/accessDenied")
    public String handleAccessDenied(){
        return "accessDenied";
    }
}

并将其放到“com.company.reporting.controller”包中。

答案 1 :(得分:0)

我已经决定不需要覆盖默认的访问被拒绝处理程序。所以我没有实现一个处理程序,而是将其添加到我的安全配置中......

<access-denied-handler error-page="/accessDenied.htm"/>