我们使用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(){
}
答案 0 :(得分:0)
您可以使用以下注释将HttpHeaders对象注入到映射器中:
@Context
HttpHeaders headers;
从那里,您可以提取所需的上下文数据。