Servlet过滤器"返回"一个供以后使用的对象

时间:2014-10-13 20:09:18

标签: java servlets

我正在我的RESTful Web服务中实现安全性,我正在考虑创建一个过滤器来检查Authorization标头是否有效,并且通过将令牌发送到第三方端点来完成此检查。如果令牌有效,则第三方端点必须向我发送一个响应,其中包含有关令牌到期,客户端ID,范围和其他内容的信息。那么,逻辑是这样的:

@Override
public void doFilter(
        final ServletRequest request, 
        final ServletResponse response,
        final FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    header = req.getHeader("Authorization");
    EndpointResponse eResponse = Endpoint.validate(header);
    if(eResponse.valid())){
      chain.doFilter(...);
      return eResponse; //or equivalent
    }else{
      HttpServletResponse res = HttpServletResponse(response);
      res.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
      ...
    }
}

然后,在DAO课程中,我将使用像这样的eResponse

public final class DAO{    
    public void checks(){
        if(eResponse.scope() == "ADMIN"){
            ...
        }else{
            ...
        }
    }
}

在过滤器进行验证后,有没有办法注入或返回一个对象?希望不使用spring或hibernate,因为我不能在我的工作中使用它们。

- 编辑 -

我访问DAO的方式就像这样

@Path("")
public class CertificationService {

    @GET
    @Produces(CertificationApplication.SUPPORTED_REPRESENTATIONS)
    @Path(CertificationConstants.URL_PATH)
    public Response getCertificationByUpId(String upId) throws CertificationException {        
        ResponseBuilder response;    
        try{
            response = Response.ok(DAO.findCertificationByUPID(upId));
        } catch (CertificationException e) {
            response = handleException(e);
        }
        return response.build();
    }


 }

findCertificationByUPID方法必须调用我在上面声明的checks()方法。

1 个答案:

答案 0 :(得分:1)

尝试使用setAttribute()

将对象放在请求上
request.setAttribute("auth", eResponse);

然后您的控制器可以使用

抓取对象
EndpointResponse eResponse = (EndpointResponse) request.getAttribute("auth");

并随意做任何事情(包括将其传递给DAO):

dao.checks(eResponse);

其中DAO与上面的相似,但是

public void checks(EndpointResponse eResponse) { ... }

代替。

如果您希望将EndpointResponse保留在DAO之外,则可以执行

public void checks(String role) { ... }

或类似。

相关问题