REST-EJB AccessLocalException 导致 BadRequest(500) 而不是 Unauthorized(401)
REST-EJB AccessLocalException causes BadRequest(500) instead of Unauthorized(401)
我得到异常:
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 - 错误请求”http 状态。相反,我想要一个“401 - 未经授权”。
我应该不使用 EJB 安全性还是应该在 ApplicationConfig 中捕获此 AccessLocalException 还是应该使用 Jersey 来实现 REST 安全性?
角色在 web.xml 中定义,注释放在 EJB Bean 上。
您可以定义一个 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();
}
}
我得到异常:
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 - 错误请求”http 状态。相反,我想要一个“401 - 未经授权”。
我应该不使用 EJB 安全性还是应该在 ApplicationConfig 中捕获此 AccessLocalException 还是应该使用 Jersey 来实现 REST 安全性?
角色在 web.xml 中定义,注释放在 EJB Bean 上。
您可以定义一个 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();
}
}