Spring Security MultiHttpSecurity配置,这样我就可以执行两种身份验证。JWT令牌和会话Cookie

Spring Security MultiHttpSecurity配置,这样我就可以执行两种身份验证。JWT令牌和会话Cookie,第1张

Spring Security MultiHttpSecurity配置,这样我就可以执行两种身份验证。JWT令牌和会话Cookie

我有你的要求

  1. 您需要在请求标头(针对每个请求)中公开应通过JWT令牌访问的API。

  2. Web应用程序也应通过基于表单的身份验证机制来保护,该机制应基于http会话进行工作。

您可以通过两个身份验证过滤器来实现。

过滤器-1 :用于Rest
API(JwtAuthTokenFilter),该API应该是无状态的,并由每次请求中发送的Authorization令牌标识。
过滤器2
:您需要另一个过滤器(UsernamePasswordAuthenticationFilter)默认情况下,如果通过进行配置,spring-
security将提供此过滤器

http.formLogin()
。在这里,每个请求都由
JSESSIONID
关联的session(cookie)标识。如果请求中不包含有效的会话,则它将被重定向到身份验证入口点(例如:login-
page)。

推荐的网址格式

api-url-pattern    = "/api/**" [strictly for @order(1)]webApp-url-pattern = "/**" [ wild card "/**" always used for higer order otherwise next order configuration becomes dead configuration]
方法
  • 定义主配置类

    @EnableWebSecurity

  • 创建两个内部静态类,它们应

    WebSecurityConfigurerAdapter
    使用@Configuration和@Order进行扩展和注释。在此,REST API配置的顺序应为1,Web应用程序配置的顺序应大于1

  • 请参阅 此链接中的我的答案以获取更多详细信息 ,其中 详细 解释了必要的代码。如果需要,请随时从github存储库中请求可下载的链接。

限制
在这里,两个过滤器将并排(平行)工作。我的意思是从Web应用程序开始,即使用户通过会话进行了身份验证,但如果没有JWT令牌,他也无法访问API。

编辑
OP的要求,即他不想定义任何角色,但允许经过身份验证的用户进行API访问。根据他的要求修改了以下配置。

http.csrf().disable().antMatcher("/web/umgmt/**").authorizeRequests().antMatcher("/web/umgmt/**").authenticated() // use this


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5166933.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存