2016-03-26 72 views
0

我需要手动登录用户到由spring安全保护的应用程序。 我的情况是弹簧安全预先验证的用户登录

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

第1步到第4步正在工作。

在我的不安全的控制器(我得到加密的数据) 我有以下几行,但这又是调用我的身份验证管理器,并且我不想在此方案中再次进行身份验证。我只想创建会话并设置用户主体。

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的配置(如果用户直接登录到我的应用程序,这将被使用)

回答

0

SecurityContextPersistenceFilter负责在网络请求开始时在SecurityContextHolder中设置SecurityContext。在网络请求结束时,请求处理期间对SecurityContext的任何更改都将被复制到HttpSession

因此,当您更新SecurityContext中的Authentication时,此过滤器将在验证请求结束时更新HttpSession

您能否确认JSESSIONID被发回的身份验证响应与所有后续请求上的身份验证响应相同?

+0

嗨,谢谢你的回答。我添加了一个自定义验证提供并解决。 – Mukun