我想使用以下代码手动绕过spring Security中的用户:
User localeUser = new User();
UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(localeUser ,null, localeUser .getAuthorities());
SecurityContext securityContext = SecurityContextHolder.getContext();
securityContext.setAuthentication(auth);
// Create a new session and add the security context.
HttpSession session = request.getSession(true);
session.setAttribute("SPRING_SECURITY_CONTEXT", securityContext);
return "dummyLogin";
虚拟登录页面(由图块处理)在内部调用同一控制器中的不同请求Map,我试图在该控制器中获得类似于以下内容的身份验证。
SecurityContextHolder.getContext().getAuthentication()
我在哪里得到空?
5条答案
按热度按时间stszievb1#
所以,我发现了真正的问题!问题是我在security-context.xml中用security=“none”标记了整个控制器。所以,当它从第一个链接跳到第二个链接时,它没有传递任何安全上下文!!很抱歉给你们带来麻烦,伙计们。
ltskdhd12#
您的localUser为空。因此auth变为空。因此没有身份验证对象被添加到安全上下文中。
请看一下文件
http://docs.spring.io/spring-security/site/docs/3.0.x/apidocs/org/springframework/security/core/userdetails/User.html
最好具有自定义UserDetailsService
则可以使用
w3nuxt5m3#
**其他答案:**如果您要获取非安全URL的登录用户详细信息,则可以将其添加到安全URL,并指定为“permitAll”,如下所示:
然后,您将能够检查已登录的用户(如果已登录)或获取凭据。
uurv41yg4#
我也面临着类似的问题。我的代码中的问题是,我的控制器的请求Map前缀在我的安全令牌配置文件中被忽略了,这导致SecurityContextHolder为空。
monwx1rj5#
试试看: