SecurityContextHolder.getContext().getAuthentication() 返回 null

新手上路,请多包涵

我想使用以下代码手动绕过 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";

虚拟登录页面(由 tiles 处理)在同一控制器中内部调用不同的请求映射,我试图在该控制器中获取类似这样的身份验证。

 SecurityContextHolder.getContext().getAuthentication()

我在哪里得到空?

原文由 Rajesh Wadhwa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

所以,我找到了真正的问题!问题是我在 security-context.xml 中用 security=“none” 标记了整个控制器。因此,当它从第一个链接跳转到第二个链接时,它没有传递任何安全上下文!!抱歉给您带来麻烦,伙计们。

原文由 Rajesh Wadhwa 发布,翻译遵循 CC BY-SA 4.0 许可协议

附加答案: 如果您想获取非安全网址的登录用户详细信息,则可以将它们添加到安全网址并分配为“permitAll”,如下所示:

 <http>
    //...

    <intercept-url pattern="/your/url/**" access="permitAll"/>

    //...
</http>

然后,您将能够检查登录用户是否已登录或获取凭据。

原文由 Bahadir Tasdemir 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题