是否可以在没有密码的情况下使用 Spring SecurityConfiguration HttpSecurity 登录?
Posted
技术标签:
【中文标题】是否可以在没有密码的情况下使用 Spring SecurityConfiguration HttpSecurity 登录?【英文标题】:Is it possible to login using the Spring SecurityConfiguration HttpSecurity without a password? 【发布时间】:2018-01-19 01:11:31 【问题描述】:我知道我的问题有点奇怪,但在连接到 LDAP 服务器的应用程序中,我们只需要让用户登录到应用程序即可。
应用程序是 Spring AngularJS。
所以现在我正在更改代码以执行此操作,但我发现登录方法已在 Spring 安全配置中完成并使用密码,因此我需要从数据库 (user.getPassword()
) 获取密码,问题是密码是用 PasswordEncoder 加密的,所以没有办法解密它(在该论坛的答案中提到)..
无论如何,我想知道是否有一种方法可以仅使用用户名(没有密码)使用 Spring Security 登录..
我试图从配置类中删除密码声明,但它不起作用。
在那个名为 (public class SecurityConfiguration extends WebSecurityConfigurerAdapter
) 的类中,我有下一个配置:
@Override
protected void configure(HttpSecurity http) throws Exception
http
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.and()
.exceptionHandling()
.authenticationEntryPoint(authenticationEntryPoint)
.and()
.rememberMe()
.rememberMeServices(rememberMeServices)
.rememberMeParameter("remember-me")
.key(jHipsterProperties.getSecurity().getRememberMe().getKey())
.and()
.formLogin()
.loginProcessingUrl("/api/authentication")
.successHandler(ajaxAuthenticationSuccessHandler)
.failureHandler(ajaxAuthenticationFailureHandler)
.usernameParameter("j_username")
.passwordParameter("j_password")
.permitAll()
.and()
.logout()
.logoutUrl("/api/logout")
.logoutSuccessHandler(ajaxLogoutSuccessHandler)
.permitAll()
.and()
.headers()
.frameOptions()
.disable()
这里是登录方法:
function login (credentials)
alert("log in this");
var data = 'j_username=' + encodeURIComponent(credentials.username)
+'&j_password=' + encodeURIComponent(credentials.password) +
'&remember-me=' + credentials.rememberMe + '&submit=Login';
return $http.post('api/authentication', data,
headers:
'Content-Type': 'application/x-www-form-urlencoded'
).success(function (response)
return response;
);
有什么想法吗?
谢谢你
【问题讨论】:
【参考方案1】:您可以随时在您的应用程序中创建SecurityContext
,不管它是否有密码:
Authentication authentication =
new UsernamePasswordAuthenticationToken(user, null, authorities);//set with authorities
SecurityContextHolder.getContext().setAuthentication(authentication);
这样你实际上只是被告知你有一个registered
用户。
【讨论】:
【参考方案2】:我不确定您是如何检索用户详细信息的,但也许您可以只使用 j_username 作为用户名和密码,然后在检索用户详细信息的方法中忽略它。
【讨论】:
以上是关于是否可以在没有密码的情况下使用 Spring SecurityConfiguration HttpSecurity 登录?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在没有 Mandrill 的情况下使用 Mailchimp 发送交易电子邮件?