【问题标题】:Add authenticated user id by filter to java servlet通过过滤器将经过身份验证的用户 id 添加到 java servlet
【发布时间】:2019-10-28 13:57:06
【问题描述】:

我有一个通过 JWT 令牌授权 REST 调用的身份验证过滤器。我已经通过 JWT 实现了身份验证,并通过过滤器实现了 JWT 验证。如何在过滤过程中将来自 JWT 的用户 id 传递给 servlet?

【问题讨论】:

    标签: java servlets servlet-filters


    【解决方案1】:

    通常这是通过HttpServletRequestWrapper 完成的。它是一个允许您在标准 HttpServletRequest 上添加或覆盖方法的对象。

    在您的过滤器中,用您自己的RequestWrapper 包装原始HttpServletRequest,然后将您的RequestWrapper 发送到servlet而不是原始HttpServletRequest

    例如,这里有一个简单的RequestWrapper 来传递经过身份验证的 userId:

    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 链之前,将原始请求包装在您的身份验证过滤器中:

    // in filter class
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
        throws ServletException {
    
        int userId;
    
        // 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);
    
    }
    

    然后,Servlet 可以使用新包装的请求方法来访问身份验证数据:

    // in servlet class
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException
    {
        // this request object is actually your own AuthenticatedRequest wrapper
        int userId = req.getUserId();
    

    Thisthis 涵盖了更多实现细节。

    【讨论】:

    • 我喜欢这个解决方案。谢谢。我会用你的方法。
    猜你喜欢
    • 2018-08-18
    • 2015-04-01
    • 2017-12-27
    • 1970-01-01
    • 2019-05-19
    • 2023-03-27
    • 2013-08-20
    • 2011-06-21
    • 2021-12-27
    相关资源
    最近更新 更多