我有一个身份验证过滤器,可以通过JWT令牌授权REST调用。我已经通过JWT实现了身份验证,并通过Filter实现了JWT验证。如何在过滤过程中将来自JWT的用户ID传递给servlet?
答案 0 :(得分:2)
通常,这是通过HttpServletRequestWrapper完成的。该对象使您可以在标准HttpServletRequest
上添加或覆盖方法。
在过滤器中,将原始HttpServletRequest
用自己的RequestWrapper
包装,然后将您的RequestWrapper
发送到原始{{1}的servlet 中}。
例如,下面是一个简单的HttpServletRequest
来传递经过身份验证的用户ID:
RequestWrapper
将原始请求包装在身份验证过滤器中,然后转发到servlet链:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class AuthenticatedRequest extends HttpServletRequestWrapper {
private int userId;
public AuthenticatedRequest(HttpServletRequest req, int userId) {
super(req);
this.userId = userId;
}
public int getUserId() {
return userId;
}
}
然后Servlet可以使用新包装的请求方法访问auth数据:
// in filter class
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws ServletException {
int userId = null;
// do something to get your authentication data (userId)
// ...
// wrap the original request with the "AuthenticatedRequest"
AuthenticatedRequest authRequest = new AuthenticatedRequest(req, userId);
// forward the AuthenticatedRequest to the servlet
chain.doFilter(authRequest, res);
}