gpt4 book ai didi

java - 通过过滤器将经过身份验证的用户 ID 添加到 java servlet

转载 作者:行者123 更新时间:2023-12-02 01:27:54 24 4
gpt4 key购买 nike

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

最佳答案

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

在过滤器中,包裹原始的 HttpServletRequest与您自己的RequestWrapper然后发送您的RequestWrapper到 servlet 而不是原来的 HttpServletRequest .

例如,这是一个简单的 RequestWrapper传递经过身份验证的用户 ID:

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涵盖更多实现细节。

关于java - 通过过滤器将经过身份验证的用户 ID 添加到 java servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56589533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com