我们的应用程序的身份验证通过siteminder代理进行,但授权是通过我们的应用程序控制的。
我正在使用org.springframework.security.web.authentication.preauth.RequestHeaderAuthenticationFilter检查标题。我还定义了UserDetailsService来加载用户详细信息。
我还需要为用户设置角色,以便我可以使用spring安全标记库和其他spring方法来检查角色并显示选项。
我该如何实现?
我在我的用户详细信息服务实现中尝试了以下语句,但似乎无法正常工作。
Authentication auth = new UsernamePasswordAuthenticationToken(user, null, roles);
SecurityContextHolder.getContext().setAuthentication(auth);
我还阅读了有关AbstractPreAuthenticatedProcessingFilter类的内容,但看起来这可能对此无用。
对此问题的任何帮助都会非常有帮助。
谢谢!
答案 0 :(得分:1)
我试图在UserDetailsService中设置角色(使用我的问题中的语句) 实施,它没有工作。
解-1: 我编写了一个子类PreAuthenticatedAuthenticationProvider并重写了authenticate方法,如下所示:
public class CustomPreAuthenticatedAuthenticationProvider extends PreAuthenticatedAuthenticationProvider {
@Autowired
DBConfig dbConfig;
@Override
public Authentication authenticate(Authentication authentication)throws AuthenticationException {
Authentication auth = super.authenticate(authentication);
User user = (User)auth.getPrincipal();
Set<Role> roles = new HashSet<Role>();
String[] rolesArray = dbConfig.getRoles(user.getAccessLevel());
for(String role: rolesArray){
Role r = new Role();
r.setName(role);
roles.add(r);
}
user.setRoles(roles);
auth = new UsernamePasswordAuthenticationToken(user, null, roles);
return auth;
}
}
解决方案-2: 我尝试在控制器中设置角色(身份验证后的主页)并且它工作正常。但看起来Solution-1是标准解决方案。