2017-06-04 88 views
0

我得到異常:REST的EJB AccessLocalException導致錯誤請求(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 

這是完全正常的,因爲它不認可此methodcall。

不幸的是,由於這個EJB也是一個REST服務,它會拋出一個「500 - 錯誤請求」http狀態。相反,我想有一個「401 - 未經授權」。

我不應該使用EJB安全性還是應該在ApplicationConfig中捕獲此AccessLocalException,還是應該使用Jersey來實現REST安全性?

角色在web.xml中定義,註釋放在EJB Bean上。

回答

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(); 
    } 
} 
相關問題