Java Servlet过滤器";“返回”;供以后使用的物体

Java Servlet过滤器";“返回”;供以后使用的物体,java,servlets,Java,Servlets,我正在restfulwebservice中实现安全性,我正在考虑创建一个过滤器来检查授权头是否有效,这个检查是通过将令牌发送到第三方端点来完成的。如果令牌有效,第三方端点必须向我发送一个响应,其中包含有关令牌过期、客户端id、作用域和其他内容的信息。那么,逻辑是这样的: @Override public void doFilter( final ServletRequest request, final ServletResponse response,

我正在restfulwebservice中实现安全性,我正在考虑创建一个过滤器来检查授权头是否有效,这个检查是通过将令牌发送到第三方端点来完成的。如果令牌有效,第三方端点必须向我发送一个响应,其中包含有关令牌过期、客户端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类中,我将使用如下的响应

public final class DAO{    
    public void checks(){
        if(eResponse.scope() == "ADMIN"){
            ...
        }else{
            ...
        }
    }
}
@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();
    }


 }
在过滤器进行验证后,是否有方法注入或返回对象?希望不用spring或hibernate,因为我不能在工作中使用它们

-编辑-

我访问DAO的方式是这样的

public final class DAO{    
    public void checks(){
        if(eResponse.scope() == "ADMIN"){
            ...
        }else{
            ...
        }
    }
}
@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()方法

尝试使用
setAttribute()
将对象放置在请求上:

然后,您的控制器可以使用

EndpointResponse eResponse = (EndpointResponse) request.getAttribute("auth");
并且可以随意使用它(包括将其传递给DAO):

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

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

如果您希望将EndpointResponse保留在DAO之外,可以这样做

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

或者类似的问题。

@JigarJoshi OP的问题根本不是关于使用字符串比较的错误。他在问他的逻辑是否好,他应该怎么做。你可以把它作为参数传递给DAO,从那里你称它为?响应对象应该是静态的吗?或者DAO如何能够访问与过滤器中使用的对象相同的对象?您的DAO根本不应该绑定到ServletRequest,这是一种不好的做法。@Luiggmendoza:同意,但我认为这超出了他的直接问题的范围。按照他介绍的设计进行。更新以反映Luiggi的评论。DAO在概念上比UI技术更基本。您应该能够在不考虑UI的情况下使用DAO。将EndpointResponse传递到DAO使这变得不可能。