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

有关使用@preauthorize时引发拒绝访问异常的方法的信息

濮丁雷
2023-03-14

我们已经使用Spring security来保护restendpoint。每个rest资源都使用@preauthorize注释进行注释。当调用方没有访问他为Spring security请求的资源的权限时,会抛出一个org.springFramework.security.access.AccessDeniedException异常。我们有一个异常映射器,它将这个带有适当错误代码403的消息返回给客户端。

public class AccessDeniedExceptionMapper implements ExceptionMapper<AccessDeniedException> {

    private static final Logger LOGGER = LoggerFactory.getLogger(AccessDeniedExceptionMapper.class);
    /* (non-Javadoc)
     * @see javax.ws.rs.ext.ExceptionMapper#toResponse(java.lang.Throwable)
     */
    @Override
    public Response toResponse(AccessDeniedException exception) {
        LOGGER.debug("Access is denied: {}",exception.getMessage());
        ResponseBuilder bldr = Response.status(Status.FORBIDDEN);
        bldr.entity("Access is denied").type(MediaType.TEXT_PLAIN_TYPE);
        return bldr.build();

    }

}
@PreAuthorize("hasRole('ACTN_START_STOP_DB') and hasPermission(#databaseId, {'ACTN_START_STOP_DB'})")
@Path("/db")
public DatabaseOperation someMethod(){
}

共有1个答案

吕淮晨
2023-03-14

您可以使用以下批注将HttpHeaders对象注入到映射器:

@Context
HttpHeaders headers;

从那里,您可能可以提取所需的上下文数据。

 类似资料:
  • 问题内容: 我在使它工作时遇到问题。它接收一个字符串,其中包含几条信息。但是,当我尝试将String写入文件以跟踪程序随时间的变化时,我收到拒绝访问错误: 叠层纱 完整的堆栈跟踪: 58行: 问题答案: 您必须先创建文件夹。但是您不能调用file.mkdirs()-您需要调用file.getParentFile()。mkdirs()-否则,您将使用文件名创建一个文件夹(这将阻止您使用以下命令创建文

  • 我正试图使用一个以S3 bucket为起点的Cloudfront私有发行版来提供内容。 我的存储桶中有一个图像文件,用于测试目的,其权限设置为私有。我已经设置了我的存储桶策略,因此Cloudfront Origin Access Idbody具有获得权限 当我将Cloudfront发行版设置为public(不使用签名URL)时,它可以正常工作。该对象不能通过直接S3链接访问,但可以使用Cloudf

  • 我对AWS SQS服务比较陌生。我编写了一些代码来包装Amazon SQS API。 我能够使用创建的队列执行基本功能,但尽管如此(事实上,我一直在使用这段代码,没有任何问题,并且我创建JUnit测试是作为一种形式),我的JUnit测试失败了,因为一个对我来说毫无意义的错误。 我已经使用AWS管理控制台创建了一个名为SerenaQForTest的队列。当我查看AWS控制台时,我可以看到我创建的队列

  • 在全局方法安全标记中使用切入点表达式 这种方法也失败了:控制器的方法没有注释仍然可以访问。

  • 问题内容: 我得到以下IOException: 尝试运行以下代码时: 在我看来,由于某种原因,JVM无法创建新文件。如果文件已经存在,则代码可以很好地运行。是否存在某种访问文件来指示JVM是否可以创建新文件还是我只是在做错什么? 任何帮助深表感谢 :-) 我正在运行Java 1.4,并且已经在Windows XP中的JDeveloper中进行了测试。 问题答案: 问题在于这些调用彼此接替: 创建操

  • 我正在开发一个名为的简单mariaDB数据库,还有一个名为的mariaDB用户。我知道StackOverflow上有很多类似的帐户,但我使用的不是根帐户,而是具有最低权限的普通帐户。 我可以通过SSH访问终端中的数据库,如下所示: 但是,当我在localhost上执行JDBC代码时,访问将在行被拒绝: java JDBC代码是:(我已经删除了类中一些不必要的内容,但是如果我遗漏了任何重要的内容,请