在 Spring Security 中传播 AccessDeniedException

2024-03-14

在我的 Web 应用程序中,我使用 Spring Security 和 Spring MVC。 我已经使用了几种方法@Secured注释并以这样一种方式配置 Spring Security:当没有适当角色的情况下访问其中一个方法时,用户将被带到登录页面。但是,当有问题的请求来自 Ajax 时,我不希望出现这种行为,因此我实现了自定义@ExceptionHandler带注释的方法来确定请求的上下文。

这是我的异常处理程序:

@ExceptionHandler(AccessDeniedException.class)
public void handleAccessDeniedException(AccessDeniedException ex, HttpServletRequest request, HttpServletResponse response) throws Exception {

    if (isAjax(request)) {
        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
    } else {
        throw ex;
    }
}

这样我就可以自己处理异常(例如,记录访问@Secured方法),然后让 Spring 发挥其作用,通过重新抛出 AccessDeniedException 将用户重定向到登录页面。另外,当请求来自 Ajax 时,我将响应状态设置为SC_UNAUTHORIZED并在客户端处理错误。 现在,这个seems工作正常,但每次我重新抛出异常时都会收到以下错误handleAccessDeniedException method:

ERROR org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver - Failed to invoke @ExceptionHandler method: public void app.controller.BaseController.handleAccessDeniedException(org.springframework.security.access.AccessDeniedException,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.lang.Exception
org.springframework.security.access.AccessDeniedException: 
    at app.controller.BaseController.handleAccessDeniedException(BaseController.java:23)
    at app.controller.BaseController$$FastClassByCGLIB$$8f052058.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
    (...)

我没有向 spring xml 配置文件添加任何异常处理细节。

我没有看到应用程序本身有任何问题,但错误确实存在,而且由于我对 Spring MVC 和 Spring Security 很陌生,我猜测我没有正确执行此操作。有什么建议么?谢谢!


您的异常处理程序不应引发另一个异常。它应该处理它并发送响应。这是个好主意检查代码 https://github.com/SpringSource/spring-framework/blob/0758e7246578c766bbd76e56aa39ecd1144c13e1/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExceptionHandlerExceptionResolver.java#L324如果你从一个类中得到一个错误,看看它的行为如何。

对于非 ajax 情况,如果您想要的话,最好将响应重定向到登录页面。或者,您可以自定义AuthenticationEntryPoint由 Spring Security 使用并省略AccessDeniedExceptions来自 MVC 处理。该行为本质上与默认行为相同LoginUrlAuthenticationEntryPoint但您可以扩展它以在检测到 ajax 请求时返回 403。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Spring Security 中传播 AccessDeniedException 的相关文章

  • java.rmi.NoSuchObjectException:表中没有这样的对象

    我正在编写一个非常简单的 RMI 服务器 并且我看到间歇性的java rmi NoSuchObjectExceptions在单元测试中 我对同一个对象进行了一串远程方法调用 虽然前几个调用成功 但后面的调用有时会失败 我没有做任何事情来取消
  • Spring webflow 应用程序:HTTP 302 暂时移动

    我的 java 应用程序中的每个请求都会生成另外 2 个带有 HTTP 302 错误的请求 例如 如果请求查看名为板 html 这个请求是从首页 html 我收到按以下顺序生成的 3 个请求 POST home html 302 Moved
  • Spring Boot中使用自定义令牌进行身份验证

    我需要保护我的 Spring Boot 应用程序 这就是我所拥有的 一个 Spring Boot 应用程序 公开了一些 REST API 与公开的 api 通信的前端 前端发送用于身份验证的自定义身份验证令牌 存储自定义身份验证令牌的数据库
  • 创建名为“securityConfig”的 bean 时出错:请求的 bean 当前正在创建中:

    package ro contabilitateexpert AccountExpert config import org springframework beans factory annotation Autowired import
  • 如何在 VS2015 中使用 Intellisense 查看抛出哪些异常?

    这个问题已在 VS2015 Update 1 中得到解决和修复 有没有办法在VS2015中显示异常 VS2015 VS2013 在您实际编写代码之前 它似乎不再显示在智能感知工具提示中 一旦代码出现 将鼠标悬停在其上即可使其完整显示 注意
  • API网关+Lambda+Python:处理异常

    我正在非代理模式下从 API Gateway 调用基于 Python 的 AWS Lambda 方法 我应该如何正确处理异常 以便使用部分异常设置适当的 HTTP 状态代码以及 JSON 正文 作为示例 我有以下处理程序 def my ha
  • 如何捕获生成器抛出的异常并恢复迭代?

    我有一个生成器 它将值的集合传递给方法并生成结果 调用的方法可能会返回异常 发生这种情况时 我希望异常转到调用生成器来处理异常的代码 然后继续循环生成器 为了说明这一点 下面是一个生成器的示例 它将产生1 抛出一个 Exception 然后
  • Meteor 抛出 throwIfSelectorIsNotId 异常

    运行某些代码时 Meteor 会抛出 throwIfSelectorIsNotId 异常 我有两个客户端运行相同的代码 当第二个客户端运行相同的代码时会引发异常 无法弄清楚这个异常的含义以及抛出的原因 希望有人能够解释一下 对于客户端上的某
  • Swagger UI 下载 PDF

    我使用 swagger UI 2 1 3 作为 API 文档 在后端 我使用 spring webmvc 我有一个返回 pdf 文件的 API 如果我在浏览器中输入 URL 它就可以正常工作 它会弹出一个下载窗口 下载的文件也可以正常工作
  • spring中如何进行单元测试验证注解

    我在类中有一些注释 例如 public class ProductModel Pattern regexp 1 1 9 0 9 message Quantity it should be number and greater than ze
  • 如何单独捕获这些异常?

    我正在编写一个与 Quickbooks 交互的 Python 程序 连接到 Quickbooks 时 根据问题的不同 我可能会遇到以下两个常见异常之一 pywintypes com error 2147352567 Exception oc
  • Spring Oauth2 使用 Spring Boot 2.0 返回 401 Unauthorized 错误

    我正在尝试使用 spring oauth2 实现 SSO 对于 spring 1 5 x 它工作得很好 但是 一旦我将 oauth 服务器应用程序升级到 spring boot 2 2 3 RELEASE 我什至无法进入登录表单 即将 ht
  • 对象集合表单的 Freemarker 语法 (Spring 3 MVC)

    我有一个命令 bean FooList 它有一个属性 它是一个集合 aList of Foo beans 我正在尝试创建一个可以编辑所有内容的表单Foo立刻 我发现了许多如何使用 JSP 执行此操作的示例 但我在将这些示例转换为 Freem
  • 无法验证 Spring Security 中 url 模式的角色

    我正在使用 spring security 3 1 7 RELEASE 和 spring 3 2 13 RELEASE 我的 spring security xml 中有如下条目
  • 如何在Spring中配置@Valid上的直接字段访问?

    我怎么知道spring web无需使用 getter setter 即可验证我的 dto PostMapping path test public void test Valid RequestBody WebDTO dto public
  • 带点 (.) 的 Spring MVC @PathVariable 被截断

    这是问题的延续Spring MVC PathVariable 被截断 https stackoverflow com questions 3526523 spring mvc pathvariable getting truncated S
  • PHP MVC 应用程序中哪里可以捕获异常?

    我有一个中小型 PHP 应用程序 用于练习 OOP 和 MVC 技能 我有初始化 引导程序调用的文件Router谁打电话控制器 gt 服务层 gt 存储库 数据库 然后将变量发送回视图层 所有依赖项均由 DiC IOC 处理 我创建抽象类
  • 在 Spring 上下文中查找方法级自定义注释

    我想知道的是 所有的类 方法Spring http en wikipedia org wiki Spring Framework注释为 Versioned的bean 我创建了自定义注释 Target ElementType METHOD E
  • 在另一个插件中覆盖插件 GSP 和控制器

    我的项目中有一个相当复杂的 grails 插件依赖结构 并且在覆盖安全插件中的类时遇到问题 我的结构有点像这样 Web App Audit Plugin Spring Security Core Plugin Security Wrappe
  • C++ Streambuf 方法可以抛出异常吗?

    我正在尝试找到一种方法来获取读取或写入流的字符数 即使存在错误并且读 写结束时间较短 该方法也是可靠的 我正在做这样的事情 return stream rdbuf gt sputn buffer buffer size 但如果streamb

随机推荐

  • 如何在 R 中 gsub 一个空的“”字符串?

    如何替换空字符串 This x c b gsub taco x 产生 taco tacobtaco 代替 taco b 有什么办法可以替换空字符串吗 我会用nchar here x nchar x 0 lt taco EDIT 如果您正在寻
  • 如何获取ServiceState的实例?

    我正在尝试获取一个实例ServiceState in my Activity 但我该怎么做呢 没有静态方法可以获取实例 也没有任何服务上的任何方法返回ServiceState实例 有的是TelephonyManager listen 称呼
  • 如何在 Laravel 模型上设置属性的默认值[重复]

    这个问题在这里已经有答案了 如何在 Laravel 模型上设置属性的默认值 我应该在创建迁移时设置默认值还是应该在模型类中设置它 您还可以在模型中设置默认属性 gt protected attributes status gt self S
  • 部署闪亮应用程序时出错

    我正在尝试将闪亮的应用程序部署到闪亮的服务器中 但出现此错误 Error HTTP 400 POST https api shinyapps io v1 applications Validation Error 在控制台写入后 shiny
  • 在 PHP 中使用大括号构建代码

    是否可以将 PHP 中的代码片段括在括号内 不使用片段作为函数 以下代码的行为是否与没有大括号时的行为相同 或者根据括号内部或外部使用的代码类型可能会出现任何问题 例如 这将是 始终以与此相同的方式行事 Update 正如 My1 的评论中
  • WebClient 的 bodyToMono 对空主体的预期行为

    当 WebClient bodyToMono 遇到空主体时 预期的行为是什么 在我的具体示例中 我们正在检查从调用后返回的状态 如果是错误 则将其转换为我们的自定义错误格式 如果转换为自定义错误格式失败 我们会以自定义格式创建一个新错误来说
  • 代码段的时间复杂度

    从在线笔记中 我读到了以下用于反转字符串的java代码片段 据称该代码片段具有二次时间复杂度 在我看来 i 的 for 循环只是迭代 s 的整个长度 它如何导致二次时间复杂度 public static String reverse Str
  • 将项目上传到 Azure Devops

    我正在尝试将现有的 Visual Studio 项目代码推送到 Azure DevOps 服务器 第一次 所有教程都从在 AzureDevops 上创建一个新项目开始 然后克隆到 Visual Studio 谁能告诉我如何将现有项目推送到服
  • Apache Shiro EhCache初始化异常:同一VM中已存在另一个未命名的CacheManager

    我正在尝试将 EhCache 配置为处理启用 Apache Shiro 的 Web 服务中的授权缓存 目前我收到以下异常 org apache shiro cache CacheException net sf ehcache CacheE
  • Android 应用内结算返回服务器响应代码 2。这是什么意思?

    我正在使用应用内结算 V3 当我尝试购买时 我收到服务器响应代码 2 我已经搜索过 但找不到有关此响应代码含义的文档 如果你看官方的话应用内结算参考 IAB 版本 3 http developer android com google pl
  • 从 Git 子模块存储库导入 React 组件

    我有一个用 React 开发的父存储库 其中有一个子子模块 也是由 React 开发的 项目文件夹结构如下所示 parent git nodemodule src subModules childProject git src js x j
  • 在 ANTLR 3 中,如何在运行时而不是提前生成词法分析器(和解析器)?

    我想在运行时生成 antlr 词法分析器 也就是说 生成语法并从语法生成词法分析器类及其在运行时的支持位 我很高兴将它输入到 java 编译器中 它可以在运行时访问 这是一种快速但肮脏的方法 生成一个combined ANTLR 语法 g给
  • 与单进程场景​​相比,多进程场景中的访问时间意外缩短

    我正在从program1访问共享库 共享数组数据结构 并找到读取该数组的所有元素的访问时间 当只有 Program1 单独执行时 我得到了大约 17000 个时钟周期 现在 当我首先在另一个选项卡中执行program2 具有空的while循
  • 使用 Travis-CI 推送 Git 存储库

    我想每次推送到主服务器时都执行一个脚本 该脚本将创建一些我想要提交和推送的文件 Travis 构建的日志似乎正在添加文件 提交和推送 但没有任何反应 我的 travis yml 是这样的 before install openssl aes
  • 通过交集和并集组合 NSArray

    我有两个 NSArrays A 和 B 它们共享一些共同的元素 例如 A 1 2 3 4 5 B 4 5 6 7 我想创建一个新的 NSArray 其中包含两个 NSArray 之间常见的内容 并与第二个 NSArray 的内容相连接 同时
  • 如何在.net core 2启动时访问IConfigurationRoot?

    我写了一个自定义ConfigurationProvider与实体框架 因为我还想让它在运行时可更新 所以我创建了一个IWritableableOption https stackoverflow com a 42705862 2441442
  • 批处理文件双击可以正常运行,但无法在 Windows 计划任务中运行

    我的 C 驱动器上有一个 archive pst 文件 我在 Outlook 中使用它来备份我的电子邮件 但我的C 不是每晚都备份的 因此 我想将 pst 文件复制到我的网络驱动器 以便持续备份 出于多种原因 我不希望 Outlook 直接
  • 为什么用于标点符号的 R gsub (或 regexp)不能获取所有标点符号?

    我正在清理基于文本的数据文件 但无法弄清楚为什么gsub punct X1 没有给出所有标点符号的匹配 不幸的是 我无法在这里复制这个问题 这让我认为这是一个字符编码问题 有问题的标点符号的外观与标准 ASCII 明显不同 这是我读入文件后
  • 在 Python 中生成一周中的日期?

    我需要从一个日期生成一周的星期一的日期 例如 2015 10 22 并生成接下来几天的日期 星期一 星期二 星期三 星期四 星期五 星期六 星期日 Java 示例 初始日期 2015 10 22 周一 date set Calendar D
  • 在 Spring Security 中传播 AccessDeniedException

    在我的 Web 应用程序中 我使用 Spring Security 和 Spring MVC 我已经使用了几种方法 Secured注释并以这样一种方式配置 Spring Security 当没有适当角色的情况下访问其中一个方法时 用户将被带