web-dev-qa-db-ja.com

TomcatでSpring Bootを起動するときのユーザー名とパスワードは何ですか?

Spring Bootを介してSpringアプリケーションをデプロイしてlocalhost:8080にアクセスするときには認証が必要ですが、ユーザー名とパスワードは何ですか、またはそれをどのように設定できますか?これをTomcat-usersファイルに追加しようとしましたが、うまくいきませんでした。

<role rolename="manager-gui"/>
    <user username="admin" password="admin" roles="manager-gui"/>

これがアプリケーションの出発点です。

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
}

これがTomcatの依存関係です。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-Tomcat</artifactId>
    <scope>provided</scope>
</dependency>

localhost:8080の認証方法は?

92
Gustavo

クラスパスにSpring Securityがあると、Spring Securityはデフォルトのユーザと生成されたパスワードで自動的に設定されます。

Pom.xmlファイルを調べてください。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

あなたがあなたのPOMにそれを持っているなら、あなたはこのようなログコンソールメッセージを持つべきです:

Using default security password: ce6c3d39-8f20-4a41-8e01-803166bb99b6

そしてブラウザのプロンプトで、ユーザuserとパスワードがコンソールに表示されます。

または、Springセキュリティを設定したい場合は、 Spring Bootのセキュリティ保護された例 をご覧ください。

これはSpring Bootリファレンスドキュメントセキュリティ の節で説明されています。

The default AuthenticationManager has a single user (‘user’ username and random password, printed at `INFO` level when the application starts up)

Using default security password: 78fa095d-3f4c-48b1-ad50-e24c31d5cf35
197
Marcel Dias

spring-security jarがクラスパスに追加されていて、それがspring-bootアプリケーションでもある場合、すべてのhttpエンドポイントはデフォルトのセキュリティ設定クラスSecurityAutoConfigurationによって保護されます。

これにより、ブラウザのポップアップが認証情報を要求します。

各アプリケーションのパスワード変更は再起動し、コンソールに表示されます。

Using default security password: 78fa095d-3f4c-48b1-ad50-e24c31d5cf35

デフォルトの前に独自のアプリケーションセキュリティ層を追加するには、

@EnableWebSecurity
public class SecurityConfig {

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

あるいは単にパスワードを変更したいだけなら、defaultを上書きすることができます。

application.xml

security.user.password = new_password

または

application.properties

spring.security.user.name=<>
spring.security.user.password=<>
33
Vino

したがって、スプリングブートセキュリティスターターの依存関係を追加するだけで、基本的なセキュリティは既にデフォルトで設定されています。

enter image description here

独自の承認と認証を書くことでセキュリティ設定をカスタマイズできます。そのためには、WebSecurityConfigurerAdapterを拡張し、そのメソッドをオーバーライドする新しいクラスSecurityConfigを作成します。

@Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("javainuse")
                .password("javainuse").roles("USER");
    }

Ref - Spring Bootのセキュリティの例

6
Gordan

デフォルトのものを指す他の回答に基づいてパスワードが見つからない場合は、最近のバージョンのログメッセージの言葉は

Using generated security password: <some UUID>
1
gdecaso

承認された回答への追加 -

パスワードがログに記録されていない場合は、 "org.springframework.boot.autoconfigure.security"ログを有効にしてください。

ロギング設定を微調整する場合は、org.springframework.boot.autoconfigure.securityカテゴリがINFOメッセージを記録するように設定されていることを確認してください。そうしないと、デフォルトのパスワードが印刷されません。

https://docs.spring.io/spring-boot/docs/1.4.0.RELEASE/reference/htmlsingle/#boot-features-security

1
Ninad Pingale

ユーザーに認証情報を要求し、サーバーの起動後に認証情報を動的に設定することもできます(お客様の環境でソリューションを公開する必要がある場合に非常に効果的です)。

@EnableWebSecurity
public class SecurityConfig {

    private static final Logger log = LogManager.getLogger();

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        log.info("Setting in-memory security using the user input...");

        Scanner scanner = new Scanner(System.in);
        String inputUser = null;
        String inputPassword = null;
        System.out.println("\nPlease set the admin credentials for this web application");
        while (true) {
            System.out.print("user: ");
            inputUser = scanner.nextLine();
            System.out.print("password: ");
            inputPassword = scanner.nextLine();
            System.out.print("confirm password: ");
            String inputPasswordConfirm = scanner.nextLine();

            if (inputUser.isEmpty()) {
                System.out.println("Error: user must be set - please try again");
            } else if (inputPassword.isEmpty()) {
                System.out.println("Error: password must be set - please try again");
            } else if (!inputPassword.equals(inputPasswordConfirm)) {
                System.out.println("Error: password and password confirm do not match - please try again");
            } else {
                log.info("Setting the in-memory security using the provided credentials...");
                break;
            }
            System.out.println("");
        }
        scanner.close();

        if (inputUser != null && inputPassword != null) {
             auth.inMemoryAuthentication()
                .withUser(inputUser)
                .password(inputPassword)
                .roles("USER");
        }
    }
}

(2018年5月)更新 - これはSpring Boot 2.xで動作するでしょう:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private static final Logger log = LogManager.getLogger();

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // Note: 
        // Use this to enable the Tomcat basic authentication (Tomcat popup rather than spring login page)
        // Note that the CSRf token is disabled for all requests
        log.info("Disabling CSRF, enabling basic authentication...");
        http
        .authorizeRequests()
            .antMatchers("/**").authenticated() // These urls are allowed by any authenticated user
        .and()
            .httpBasic();
        http.csrf().disable();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        log.info("Setting in-memory security using the user input...");

        String username = null;
        String password = null;

        System.out.println("\nPlease set the admin credentials for this web application (will be required when browsing to the web application)");
        Console console = System.console();

        // Read the credentials from the user console: 
        // Note: 
        // Console supports password masking, but is not supported in IDEs such as Eclipse; 
        // thus if in IDE (where console == null) use scanner instead:
        if (console == null) {
            // Use scanner:
            Scanner scanner = new Scanner(System.in);
            while (true) {
                System.out.print("Username: ");
                username = scanner.nextLine();
                System.out.print("Password: ");
                password = scanner.nextLine();
                System.out.print("Confirm Password: ");
                String inputPasswordConfirm = scanner.nextLine();

                if (username.isEmpty()) {
                    System.out.println("Error: user must be set - please try again");
                } else if (password.isEmpty()) {
                    System.out.println("Error: password must be set - please try again");
                } else if (!password.equals(inputPasswordConfirm)) {
                    System.out.println("Error: password and password confirm do not match - please try again");
                } else {
                    log.info("Setting the in-memory security using the provided credentials...");
                    break;
                }
                System.out.println("");
            }
            scanner.close();
        } else {
            // Use Console
            while (true) {
                username = console.readLine("Username: ");
                char[] passwordChars = console.readPassword("Password: ");
                password = String.valueOf(passwordChars);
                char[] passwordConfirmChars = console.readPassword("Confirm Password: ");
                String passwordConfirm = String.valueOf(passwordConfirmChars);

                if (username.isEmpty()) {
                    System.out.println("Error: Username must be set - please try again");
                } else if (password.isEmpty()) {
                    System.out.println("Error: Password must be set - please try again");
                } else if (!password.equals(passwordConfirm)) {
                    System.out.println("Error: Password and Password Confirm do not match - please try again");
                } else {
                    log.info("Setting the in-memory security using the provided credentials...");
                    break;
                }
                System.out.println("");
            }
        }

        // Set the inMemoryAuthentication object with the given credentials:
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        if (username != null && password != null) {
            String encodedPassword = passwordEncoder().encode(password);
            manager.createUser(User.withUsername(username).password(encodedPassword).roles("USER").build());
        }
        return manager;
    }

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

オーバーライドするとき

spring.security.user.name=
spring.security.user.password=

application.propertiesでは、"の周りに"username"は必要なく、usernameを使用するだけです。別のポイントは、生のパスワードを保存する代わりに、bcrypt/scryptで暗号化し、次のように保存します

spring.security.user.password={bcrypt}encryptedPassword
0