具有自定义AuthenticationProvider自定义用户详细信息和自定义安全上下文的Spring Security

时间:2019-06-24 11:29:55

标签: java spring spring-security

我有一个Keycloak连接器,它使我可以通过SSO检索用户的用户名。我想使用该用户名对用户进行身份验证,并在数据库中查找其权限,并在Spring Security中注入该用户权限以能够使用其功能。

我已经用自定义UserDetailsS​​ervice创建了一个自定义authenticationProvider,我一直面临的问题是每次都重定向到Spring安全登录页面。我认为当看到请求中没有身份验证对象时,它会自己执行。

这是检索用户名的代码。我觉得我已经掌握了大部分内容,但是我不知道如何在春季安全性中或在至少我到目前为止的所有想法都行不通。这就是为什么我希望找到一个在Spring Security方面能为我指出正确方向的专家。 预先感谢

KeycloakSecurityContext sc = (KeycloakSecurityContext)request.getAttribute(KeycloakSecurityContext.class.getName());
IDToken idToken=sc.getIdToken();
String userId=idToken.getPreferredUsername();

1 个答案:

答案 0 :(得分:0)

这就是我最终要做的,我创建了CustomAuthenticationFilter扩展了GenericFilterBean,我通过SecurityConfig扩展了WebSecurityConfigurerAdapter放置在过滤器链中,在doFilter方法中的此过滤器中,我检索了用户名并创建了UsernamePasswordAuthenticationToken,然后将其添加到我从SecurityContext检索CustomAuthenticationProvider中的用户名,该CustomAuthenticationProvider通过调用数据库并检索角色来创建身份验证。