使用Springboot在https url中的用户名和密码

时间:2019-07-16 12:09:11

标签: java apache spring-boot tomcat

我需要使用如下网址访问我的spring boot应用程序: https://username:password@IpServer/

我已经实现了https协议,但是这里的问题是如何添加用户并通过url

通常,我使用以下网址访问我的应用程序: https://@IpServer/

我需要遇到此主题的任何机构的帮助

2 个答案:

答案 0 :(得分:0)

问题在于,如果您确实在URL路径中对用户名和密码进行了编码,则会创建一个巨大的安全漏洞。 URL通过DNS /域控制器时将被记录下来。因此,每个人的用户名和密码都会被破坏。

由于您的连接已通过SSL加密,因此您应该在http标头或请求的正文中发送这些凭据。

答案 1 :(得分:0)

我终于注意到,Spring boot集成了该apache选项,您应该在修改应用程序属性后添加Spring安全性的Security依赖项(同样适用于https协议):

# Define a custom port instead of the default 8080
server.port=443

#Define http server
#http.port=8080

# Tell Spring Security (if used) to require requests over HTTPS
security.require-ssl=true

# The format used for the keystore 
server.ssl.key-store-type=PKCS12
# The path to the keystore containing the certificate
server.ssl.key-store=classpath:keystore.p12
# The password used to generate the certificate
server.ssl.key-store-password=keycertifpass
# The alias mapped to the certificate
server.ssl.key-alias=tomcat

在新类中添加基本身份验证之后,这种身份验证负责添加用户并通过URL传递:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;


import com.project.exception.CustomAuthenticationEntryPoint;

@Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {


    @Autowired
    private CustomAuthenticationEntryPoint unauthorizedHandler;

    /** Use Basic Authentication **/

    @Override
    public void configure(HttpSecurity http) throws Exception
    {
        http.httpBasic().realmName("user").and().authorizeRequests()
        .antMatchers("/**").hasRole("user")
        .and()
        .csrf().disable()
        .exceptionHandling().authenticationEntryPoint(unauthorizedHandler); 
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth)
            throws Exception
    {
        auth.inMemoryAuthentication()
        .withUser("user").password(passwordEncoder().encode("pass")).roles("user");
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

}

对我来说,我已经为authenticationEntryPoint自定义了错误处理,可以根据需要添加它,也可以不进行自定义而保留它,这是免费的。

我希望这个答案能帮助遇到相同问题的人。

谢谢大家。