我有一个通过JWT令牌授权REST调用身份验证过滤器。我已经通过JWT和JWT过滤器验证实现了认证。在过滤过程中,如何将来自JWT的用户id传递给servlet?
通常使用HttpServletRequestWrapper完成此操作。它是一个允许您在标准HttpServletRequest
上添加或覆盖方法的对象。
在您的过滤器中,使用您自己的请求包装器
包装原始的 HttpServlet 请求
,然后将您的请求包
发送到该 servlet 而不是原始的 HttpServlet请求
。
例如,下面是一个简单的< code>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();
这个和这个涵盖了更多的实现细节。
我的代码在这里:代码重新发布是因为我想问一个更直接的问题。如何在未经身份验证的用户和经过身份验证的用户之间切换?我的未经验证的文件似乎已缓存,我使用了以下方法: 在我剩下的api代码之前,它仍然不能工作。谢谢你的帮助 注意:我知道它不起作用,因为我在切换配置/凭据提供程序后立即使用lambda进行调用,并且只有授权用户才能调用此方法。 编辑@behrooziAWS答案: API代码: 完整错误:B
问题内容: 前言 这是我第一次尝试过滤器,要小心。 项目介绍 我正在尝试为我们的一些应用程序最终确定SSO的构建,而且似乎步履维艰。我尝试连接的Webapp使用“身份验证”标头来确定应用程序内的用户凭据。我构建了一个Filter,希望在将标头传递到Web应用程序之前对其进行设置。 问题 该代码通过Eclipse验证,编译,加载到Tomcat,然后传递到Webapp。唯一缺少的是Authentica
问题内容: 问题: 我们有一个基于Spring MVC的RESTful API,其中包含敏感信息。该API应该是安全的,但是不希望随每个请求一起发送用户凭证(用户/密码组合)。根据REST准则(和内部业务要求),服务器必须保持无状态。该API将由另一台服务器以mashup方式使用。 要求: 客户端使用凭据向(不受保护的URL)发出请求;服务器返回一个安全令牌,该令牌包含足够的信息供服务器验证未来的
我正在尝试在反应式Spring Boot应用程序中配置Spring Security性,并包括依赖于新的Spring Security版本5.0.0的父项目。RC1: 我将我的Spring WebSecurity配置为使用自定义AuthenticationFilter来检索我的身份验证信息,以及使用我自己的提供者的自定义AuthenticationManager。 配置: ReactiveAuth
我正在尝试将AWS Cognito(用户池)和AWS DynamoDB用于我的移动应用程序。 我做了以下工作: 在AWS Cognito上创建用户池。 在AWS Cognito上创建身份池,并将用户池ID、应用客户端ID设置为身份验证提供商上的Cognito。 在AWS DynamoDB上创建SampleTable. 设置权限验证角色以访问AWS IAM上的SampleTable。 我创建了以下代
我正在我的Web应用程序中构建聊天功能。我使用jitsi作为我们的聊天服务器。在视频聊天会话中可以有2-4个用户。这些会话将被锁定。Web应用程序将启动聊天,并将控制谁可以加入聊天室。 我试图嵌入jitsi满足内部使用jitsi满足外部API的网页这里列出https://github.com/jitsi/jitsi-meet/blob/master/doc/api.md。 我们的jitsi会议不向