我正在尝试设置我的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 />
感谢
答案 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"/>