REST-EJB AccessLocalexception会导致Badrequest(500)而不是未经授权(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上放置。

您可以定义异常,该异常将一般异常映射到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();
  }
}

最新更新