java - 修改 Spring @RolesAllowed 的行为

标签 java spring spring-mvc spring-security spring-annotations

我正在使用 Spring @RolesAllowed 来保护我的 API(方法),但我想更改未经授权的用户调用方法时发生的情况。当前的行为是 Spring 抛出 HTTP 403 错误。这很棒,但我只想在 403 响应正文中添加一个额外的错误代码,以便能够区分不同场景中的访问被拒绝错误。

我很难弄清楚 @RolesAllowed 注释的实现位置。有人遇到过吗?或者试图改变它的行为?

我的 Controller 中的方法当前如下所示:

@RolesAllowed({"ROLE_DEFENDANT", "ROLE_ADMIN"})
@RequestMapping(method = RequestMethod.POST, value = "/{caseId}/owner")
public ResponseEntity<?> assignOwner(@PathVariable String caseId) {

    // method implementation

}

最佳答案

执行此操作的另一种方法是使用异常处理程序类和 @ExceptionHandler 注释。

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(AccessDeniedException.class)
    public ResponseEntity<?> handleAccessDenied(HttpServletRequest request, AccessDeniedException ex) {

        // exception handling logic
        if (request.getUserPrincipal() == null) {
            // user is not logged in
        } else {
            // user is logged in but doesn't have permission to the requested resource
        }

        // return whatever response you'd like
        return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
    }

}

关于java - 修改 Spring @RolesAllowed 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32322610/

相关文章:

java - 使用 Java http 客户端使用 Sharepoint 2010 REST API 发布数据

spring - Grails Spring安全性和LDAP身份验证失败

java - 通过RabbitMQ维护correlationId

java - web.xml 中的 spring web 服务配置?

java - 为什么 Spring 不允许读操作排他锁?

java - SherlockfragmentActivity 和 sherlockListFragment

java - 重定向到 groovy/grails 中的不同 Controller

java - 不维护添加产品的顺序

java - 运行时获取数据库信息

java - Spring MVC 中的多个多部分文件 - Ajax