【问题标题】:spring security 404 for access-denied-handler用于拒绝访问处理程序的弹簧安全 404
【发布时间】:2014-01-16 12:07:22
【问题描述】:

我正在尝试设置我的 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 />

谢谢

【问题讨论】:

    标签: spring spring-security


    【解决方案1】:

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

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

    并将其放入您的“com.company.reporting.controller”包中。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-08-07
        • 2014-05-08
        • 2012-10-05
        • 2013-10-31
        • 2011-12-26
        • 2013-12-25
        • 1970-01-01
        • 2014-02-05
        • 2016-01-02
        相关资源
        最近更新 更多