是否可以在没有密码的情况下使用 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 登录?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有密码编码的情况下使用 Spring 安全性?

是否可以在没有功能区的情况下使用@FeignClient?

导出不带密码的 gpg 密钥

是否可以在没有 Mandrill 的情况下使用 Mailchimp 发送交易电子邮件?

在没有 Spring Boot 应用程序的情况下使用 Spring Data JPA

SSH是否允许用户在没有密码和密钥的情况下登录?