2013-12-23 65 views
1

我试图设置我的弹簧mvc webapp使用弹簧访问拒绝处理程序,但无法获取它来捕获错误。使用我的配置,它看起来像春天前往访问被拒绝的处理程序,但由于某种原因,当我的访问被拒绝处理程序执行时,我得到404找不到。 HTTP状态404 -/accessDenied。访问拒绝处理程序弹簧安全404

有人可以帮助我找出可能出错的地方吗?我肯定有一个名为accessDenied.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-调度员的servlet

然后JSP ...

<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

谢谢

回答

0

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

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

创建accessDeniedHandler bean是不够的。这个bean只会将你的请求重定向到/ accessDenied URL。您还应该创建AccessDeniedController(或命名为水木清华这样的)与下面的代码:

@Controller 
public class AccessDeniedController { 

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

,并把它放到你的“com.company.reporting.controller”包。