在Spring Security上以编程方式登录,并在AngularJS(JHipster)上进行身份验证

在Spring Security上以编程方式登录,并在AngularJS(JHipster)上进行身份验证,angularjs,spring,authentication,spring-security,jhipster,Angularjs,Spring,Authentication,Spring Security,Jhipster,在从浏览器发出常规GET请求后,我需要对JHipster(Spring Security/AngularJS)用户进行身份验证,然后重定向到AngularJS应用程序(用于OpenID身份验证) 重定向到“”后,响应头会附带一个JSESSIONID,但我不知道这是否是我需要的令牌(这是“用户”身份验证令牌吗?),并且它不会保留在浏览器cookie中(可能是因为重定向?) 如果我使用默认的JHipster AngularJS用户名/密码表单登录,那么响应头将附带 Set-Cookie:XSRF-T

在从浏览器发出常规GET请求后,我需要对JHipster(Spring Security/AngularJS)用户进行身份验证,然后重定向到AngularJS应用程序(用于OpenID身份验证)

重定向到“”后,响应头会附带一个JSESSIONID,但我不知道这是否是我需要的令牌(这是“用户”身份验证令牌吗?),并且它不会保留在浏览器cookie中(可能是因为重定向?)

如果我使用默认的JHipster AngularJS用户名/密码表单登录,那么响应头将附带

Set-Cookie:XSRF-TOKEN=108cadcf-2005-4e36-b055-438d75dc1ce9; path=/
Set-Cookie:JSESSIONID=foVcxycPQbUgS6nviKG1ftXSIgnlgDJdtxEGCSGZ; path=/; HttpOnly
Set-Cookie:remember-me=N2pNMGFRRGJENldhZWpQTGV2d1k6c3NOTkk1WWpnR28xcWRldDE2T3U; path=/; HttpOnly; Max-Age=2678400; Expires=Sun, 07-May-2017 07:40:16 GMT

认为这里的解决方案是以编程方式登录用户,获取有效的JSESSIONID令牌,并在使用Location标头重定向时/之后在浏览器中将其设置为cookie,但我在这些步骤中遇到了问题。非常感谢您的帮助。

事实上,这句话并不是我想要的方式:

Authentication auth = new UsernamePasswordAuthenticationToken(user, null);
正在设置JSESSIONID,但在请求身份验证失败后,它将被销毁

我改为:

Authentication auth = new UsernamePasswordAuthenticationToken(user, null, new ArrayList<GrantedAuthority>());
Authentication auth=new UsernamePasswordAuthenticationToken(user,null,new ArrayList());

通过使用不同的构造函数,它现在可以正确地进行身份验证。

实际上,这一行并没有按照我希望的方式进行身份验证:

Authentication auth = new UsernamePasswordAuthenticationToken(user, null);
正在设置JSESSIONID,但在请求身份验证失败后,它将被销毁

我改为:

Authentication auth = new UsernamePasswordAuthenticationToken(user, null, new ArrayList<GrantedAuthority>());
Authentication auth=new UsernamePasswordAuthenticationToken(user,null,new ArrayList());

通过使用不同的构造函数,它现在可以正确地进行身份验证。

JHipster提供了开箱即用的OpenID身份验证(称为“社交登录”),而且它比“常规获取请求”复杂得多,所以最好的解决方案可能是从现有模板开始,而不是自己制作模板


接下来,“JSSessionID”cookie和请求参数不受JHipster或Spring Security的控制/创建/修改,这是容器级别的,是servlet规范的一部分,完全由servlet容器控制,在内部(一种情况)用于实例化/获取会话bean。您不应该试图覆盖它们。

JHipster提供了开箱即用的OpenID身份验证(称为“社交登录”),它比“常规获取请求”复杂得多,所以最好的解决方案可能是从现有模板开始,而不是自己制作模板


接下来,“JSSessionID”cookie和请求参数不受JHipster或Spring Security的控制/创建/修改,这是容器级别的,是servlet规范的一部分,完全由servlet容器控制,在内部(一种情况)用于实例化/获取会话bean。您不应该试图覆盖它们。

这根本不是身份验证。您正在绕过身份验证并将其置于安全上下文中。它根本不进行身份验证。您正在绕过身份验证并将其置于安全上下文中。