首页 > 解决方案 > 如何在 Spring Security 5 中进行未经身份验证的授权

问题描述

我是 Spring Security 的新手。我正在尝试将 Spring Security 集成到我的 Web 应用程序中。

我们有自己的身份验证过程,无法修改。然而,一旦用户成功完成了这个过程,它就会被加载到会话中,包括角色。

我们试图实现的是利用这些信息来进行 Spring Security 的授权过程,也就是说,强制它从用户 session 中获取角色,而不是通过 authentication-provider 来获取它。

有没有办法在 Spring Security 5 中实现这一点?

标签: authenticationspring-securityauthorization

解决方案


这应该有效。只需配置您的 spring 安全性,因为您将使用 http 基本身份验证。

然后在您完成自定义登录时,设置它,以便 Spring 安全性可以使用它进行授权。

Authentication authentication = new 
    UsernamePasswordAuthenticationToken("username", null, authoritiesOfUser);
SecurityContextHolder.getContext().setAuthentication(authentication);
HttpSession session = req.getSession(true);
session.setAttribute(SPRING_SECURITY_CONTEXT_KEY, 
                     SecurityContextHolder.getContext()); 

Spring security 有一个名为 的过滤器SecurityContextPersistenceFilter,它会自动获取您上面设置的内容,将其放入带有自己的密钥的 http 会话中,然后SecurityContextHolder.getContext()在后续请求中重新填充。


推荐阅读