REST-EJB AccessLocalException导致BadRequest(500)而不是Unauthorized(401)

时间:2017-06-04 06:04:17

标签: java security java-ee jersey ejb

我得到例外:

Warning:   StandardWrapperValve[org.netbeans.rest.application.config.ApplicationConfig]: Servlet.service() for servlet org.netbeans.rest.application.config.ApplicationConfig threw exception
javax.ejb.AccessLocalException: Client not authorized for this invocation

这是完全正常的,因为它没有被授权进行此方法调用。

遗憾的是,由于这个EJB也是一个REST服务,它会抛出一个" 500 - Bad Request" http状态。相反,我希望有一个" 401 - 未经授权"。

我不应该使用EJB安全性,还是应该在ApplicationConfig中捕获此AccessLocalException,还是应该使用Jersey来实现REST安全性?

角色在web.xml中定义,注释放在EJB Bean上。

1 个答案:

答案 0 :(得分:0)

您可以定义一个ExceptionMapper,它将一般异常映射到HTTP响应。

import javax.ejb.EJBAccessException;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider
public class EJBAccessExceptionMapper implements
        ExceptionMapper<EJBAccessException>
{
  @Override
  public Response toResponse(EJBAccessException exception)
  {
    return Response.status(Response.Status.UNAUTHORIZED).build();
  }
}