有关使用@PreAuthorize时抛出Access Denied异常的方法的信息

时间:2014-07-31 11:45:22

标签: java spring rest spring-security

我们使用Spring安全性来保护我们的休息端点。每个休息资源都使用@PreAuthorize注释进行注释。当调用者无法访问他请求Spring安全性的资源时,会抛出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();

    }

}

现在,是否有可能获得有关方法的信息[在本例中为someMethod]实际上会抛出此异常? 我们的想法是根据客户端访问的资源向客户端抛出自定义异常。

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

1 个答案:

答案 0 :(得分:0)

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

@Context
HttpHeaders headers;

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