当前位置: 首页 > 知识库问答 >
问题:

Spring Security不会抛出任何异常

凌翔宇
2023-03-14

我的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>

自定义处理程序:

@Component
public class AccessDeniedHandler extends AccessDeniedHandlerImpl {
@Override
public void handle(HttpServletRequest request,
                   HttpServletResponse response, AccessDeniedException exception)
        throws IOException, ServletException {
    super.handle(request, response, exception);
    }
}

异常解析器:

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
        <props>
            <prop key=".AccessDeniedException">accessDenied</prop>
        </props>
    </property>
</bean>

我的问题是spring security不会抛出任何异常。例如,当我输入一个受保护的url时,它会将我重定向到登录页面。如果我从配置中删除登录页面,它会将我重定向到spring security默认登录表单。因此,我不能处理任何异常,如AccessDeniedException。正如你在上面看到的,我已经定义了自定义的拒绝访问处理程序,它覆盖了handle方法,但是它甚至没有进入handle方法。我也尝试使用SimpleMappingExceptionResolver,但也不起作用。所以我的问题是:如何让spring security抛出异常,以便我可以通过解析器或自定义处理程序来捕捉它们?

共有1个答案

骆雅昶
2023-03-14

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

感谢卢克·泰勒(Luke Taylor)向我澄清了这一点。

 类似资料:
  • 抛出异常的行为是否可能抛出不同的异常? 为了抛出异常,必须(可选地)分配新对象,并调用其构造函数(隐式调用fillinstacktrace)。在某些情况下,听起来像addSupressed也被称为。那么如果没有足够的内存会发生什么呢?JVM是否需要预分配内置异常?例如,(1/0)会抛出OutOfMemoryError而不是ArithmeticException吗? 此外,构造函数是一个方法调用,因

  • 我在其中一个POJO中使用javax.validation.constraints.NotNull,如下所示: 然后,即使我为两个字段都使用 null 值制作 Abc 的对象,它也不会引发任何异常。知道为什么吗? 例如。 不会抛出任何异常。

  • 问题内容: 我正在使用jackson 2.2批注@JsonProperty,并将required设置为true。通过ObjectMapper readValue()方法反序列化不包含该属性的json文件时,不会引发异常。它应该以其他方式工作还是我错过了什么? 我的DTO课程: 这是我如何反序列化类: 实际上是这样的: Actuall json看起来像: 我希望这是因为json文件中未指定_name

  • 我正试图用Java开发一个卡片验证程序。方法基本上检查给定的卡号是否有效。我在那里指定了一个条件,该条件应该抛出一个,但它没有 以下是我的Java文件:- 现在,下面的代码片段应该抛出提到的,不是吗,因为我故意从我的main向方法提供无效的参数? 下面是我在控制台中得到的输出

  • 本文向大家介绍关于C#数强转会不会抛出异常详解,包括了关于C#数强转会不会抛出异常详解的使用技巧和注意事项,需要的朋友参考一下 前言 在编程的过程中我们都知道有些错误是难以避免的,为了避免错误所带来的程序不友好所以程序当中引入了异常处理机制,又因为数据类型奇多和处理方式不同,应要求又有了数据转换的机制。 最近遇到一个小伙伴问我,从一个很大的数强转,会不会抛出异常。实际上不会出现异常。 最简单的代码

  • 在你可以捕获异常之前,一些代码必须抛出一个异常。任何代码都可能会抛出异常:您的代码,来自其他人编写的包(例如Java平台附带的包)或Java运行时环境的代码。无论是什么引发的异常,它总是通过 throw 语句抛出。 您可能已经注意到,Java平台提供了许多异常类。所有类都是Throwable类的后代,并且都允许程序区分在程序执行期间可能发生的各种类型的异常。 您还可以创建自己的异常类来表示在您编写