有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java spring安全预认证用户登录

我需要手动将用户登录到由spring security保护的应用程序中。 我的设想是

  1. 用户登录应用程序1
  2. 将提供指向我的spring应用程序的链接
  3. 当用户点击链接时,应用程序1将把加密的数据发布到我的spring应用程序中一个不安全的url
  4. 现在,我的控制器将接收加密数据并调用web服务 在应用程序1中,加密数据将在web服务中传递,我会得到一个带有用户名的响应
  5. 一旦我得到用户名。我不想重新验证。我只想设置用户主体/身份验证对象并加载仪表板

第一步到第四步是有效的

在我的不安全控制器中(我从中获取加密数据) 我有以下几行代码,但这将再次调用我的身份验证管理器,在这种情况下,我不想再次进行身份验证。我只想创建会话并设置用户主体

String username = application1.webservice(encoded data);
    Authentication authentication = new UsernamePasswordAuthenticationToken(username,password);
     SecurityContextHolder.getContext().setAuthentication(authentication);
     return "redirect:/app";

注意:我确实有基于表单的LDAP身份验证(如果用户直接登录到我的应用程序,将使用此功能) 我使用的是spring security 3.2/Java配置


共 (1) 个答案

  1. # 1 楼答案

    SecurityContextPersistenceFilter负责在web请求开始时在SecurityContextHolder中设置SecurityContext。在请求处理过程中对SecurityContext的任何更改都将在web请求结束时复制到HttpSession

    因此,当您在SecurityContext中更新Authentication时,此筛选器将在身份验证请求结束时更新HttpSession

    您能否确认在身份验证响应中发送回的JSESSIONID与在所有后续请求中传递的JSESSIONID相同