Java SpringSecurity不会抛出任何异常

Java SpringSecurity不会抛出任何异常,java,spring,security,spring-mvc,spring-security,Java,Spring,Security,Spring Mvc,Spring Security,我的spring安全配置: <security:http auto-config="true" use-expressions="true" > <security:intercept-url pattern="/game/**" access="isAuthenticated()"/> <security:intercept-url pattern="/**" access="permitAll"/> <security:form-login pa

我的spring安全配置:

<security:http auto-config="true"  use-expressions="true" >
<security:intercept-url pattern="/game/**" access="isAuthenticated()"/>
<security:intercept-url pattern="/**" access="permitAll"/>

<security:form-login password-parameter="password"  username-parameter="username"  login-page="/"
            default-target-url="/game/" login-processing-url="/processLogin" authentication-failure-url="/"/>
<security:logout logout-url="/game/logout" logout-success-url="/" delete-cookies="true" invalidate-session="true"/>
<security:access-denied-handler ref="accessDeniedHandler" />
</security:http>
异常解析程序:

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
        <props>
            <prop key=".AccessDeniedException">accessDenied</prop>
        </props>
    </property>
</bean>
我的问题是spring安全性不会抛出任何异常。例如,当我输入受保护的url时,它会将我重定向到登录页面。如果我从配置中删除登录页面,它会将我重定向到spring安全默认登录表单。因此,我无法处理任何异常,如AccessDeniedException。正如您在上面所看到的,我已经定义了自定义的拒绝访问处理程序,它覆盖了handle方法,但它甚至没有进入它的内部。我还尝试使用SimpleMappingExceptionResolver,但这也不起作用。
因此,我的问题是:如何使spring security抛出异常,以便通过解析程序或自定义处理程序捕获它们?

我的AccessDeniedHandler无法工作的原因是它只适用于经过身份验证的用户,因此,为了在未经身份验证的用户试图仅为经过身份验证的用户访问内容时显示错误页面(这是试图捕获AccessDeniedException的目的),您应该编写自定义入口点,并覆盖默认入口点


感谢Luke Taylor向我澄清了这一点。

我的AccessDeniedHandler之所以不起作用,是因为它只适用于经过身份验证的用户,所以为了在未经身份验证的用户尝试仅为经过身份验证的用户访问内容时显示错误页面,这是为了捕获AccessDeniedException,您应该编写自定义入口点,并覆盖默认入口点


感谢Luke Taylor向我澄清这一点。

AccessDeniedHandler仅适用于经过身份验证的用户。也许如果你更详细地解释一下你想要达到的目标。例如,为什么不希望Spring Security对用户进行身份验证?嗨,Luke,谢谢你提供的信息。不知道它只适用于经过身份验证的用户。我试图做的是,当未经身份验证的用户试图仅为经过身份验证的用户访问内容时,仅显示我的错误页面,但不将其映射到任何url,以便用户无法手动输入/拒绝。例如,您的问题不清楚用户实际上是如何通过身份验证的,或者为什么您不希望他们在访问地点如果要覆盖身份验证过程以拒绝访问,可以使用自定义AuthenticationEntryPoint。默认打开将重定向到登录页面。也不要使用自动配置。无论您是否配置,它都将创建登录设置。只需删除它。删除自动配置,谢谢。现在,关于我的问题,假设有人进入主页,他们还没有通过身份验证,并通过键入正确的url手动尝试为经过身份验证的用户访问内容。在本例中,spring只是自动将它们重定向到登录页面,我想做的只是显示错误页面,但再次显示错误页面,而不将其映射到url地址。因此,如上所述,您希望覆盖显示登录页面的默认行为。请参阅示例。AccessDeniedHandler仅适用于经过身份验证的用户。也许如果你更详细地解释一下你想要达到的目标。例如,为什么不希望Spring Security对用户进行身份验证?嗨,Luke,谢谢你提供的信息。不知道它只适用于经过身份验证的用户。我试图做的是,当未经身份验证的用户试图仅为经过身份验证的用户访问内容时,仅显示我的错误页面,但不将其映射到任何url,以便用户无法手动输入/拒绝。例如,您的问题不清楚用户实际上是如何通过身份验证的,或者为什么您不希望他们在访问地点如果要覆盖身份验证过程以拒绝访问,可以使用自定义AuthenticationEntryPoint。默认打开将重定向到登录页面。也不要使用自动配置。无论您是否配置,它都将创建登录设置。只需删除它。删除自动配置,谢谢。现在,关于我的问题,假设有人进入主页,他们还没有通过身份验证,并通过键入正确的url手动尝试为经过身份验证的用户访问内容。在本例中,spring只是自动将它们重定向到登录页面,我想做的只是显示错误页面,但再次显示错误页面,而不将其映射到url地址。因此,如上所述,您希望覆盖显示登录页面的默认行为。例如,见。
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
        <props>
            <prop key=".AccessDeniedException">accessDenied</prop>
        </props>
    </property>
</bean>