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