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


147

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ますか?



認証する必要があります=認証を受けたいですか?なぜなら、spring-boot-starter-tomcat / -webには認証もユーザー名とパスワードもないからです。いくつか表示されている場合は、おそらく:8080の別のアプリケーションです
zapl '17年

2
起動時にコンソールに出力されます。
クリリス

回答:


297

クラスパスに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 Reference」ドキュメントで説明されており、次のことを示しています。

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

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

綺麗な。すべてがデフォルトに設定されました。両刃の剣。
Sachin Sharma

1
私の場合(スプリングブートvs:2.0.4)コンソールは「生成されたセキュリティパスワードの使用:eb7a9e02-b9cc-484d-9dec-a295b96d94ee」
Amir

私もそうでした。私はちょうどそれについて質問し始めようとしていました。
Dmitriy Ryabin

@Marcelクラスパスに春のセキュリティを追加し、生成されたパスワードを確認できますが、ユーザーとしてユーザー名、パスワードとして生成されたパスワードとして、postmanを介して基本認証で使用すると、無許可になります。
Lokesh Pandey

50

場合spring-securityジャーをクラスパスに追加され、またそれがある場合は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");
    }
}

または、パスワードを変更するだけの場合は、デフォルトを上書きできます。

application.xml

security.user.password = new_password

または

application.properties

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

spring.security.user.name = <> spring.security.user.password = <>をapplication.propertiesファイルに追加しました。他には何もしませんでした。それでもうまくいきました。
Barani r

xmlの例でプロパティ名が間違っているIt's spring.security.user.password = xxx .ymlファイルを使用しているため、XMLのフォーマットも不明
davidfrancis

使用している場合inMemoryAuthentication、あなたはかなりとパスワードを接頭辞{} NOOPあなたはエラー受け取るとき:There is no PasswordEncoder mapped for the id “null”
マーティン・バンWingerden

これをSecurityConfigクラスに追加します@Bean public PasswordEncoder passwordEncoder(){return NoOpPasswordEncoder.getInstance(); }修正できるid「null」にマッピングされたPasswordEncoderはありません
apss1943

9

オーバーライドするとき

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

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

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

3

デフォルトのパスワードを指す他の回答に基づいてパスワードを見つけることができない場合、最近のバージョンのログメッセージの文言は次のように変更されました

Using generated security password: <some UUID>

2

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

@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();
    }
}

2

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

ログにパスワードが表示されない場合は、「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


0

Spring Securityの学習を開始したとき、以下のコードスニペットのようにメソッドuserDetailsS​​ervice()をオーバーライドしました。

@Configuration
@EnableWebSecurity
public class ApplicationSecurityConfiguration extends WebSecurityConfigurerAdapter{

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .authorizeRequests()
                .antMatchers("/", "/index").permitAll()
                .anyRequest().authenticated()
                .and()
                .httpBasic();
    }

    @Override
    @Bean
    public UserDetailsService userDetailsService() {
        List<UserDetails> users= new ArrayList<UserDetails>();
        users.add(User.withDefaultPasswordEncoder().username("admin").password("nimda").roles("USER","ADMIN").build());
        users.add(User.withDefaultPasswordEncoder().username("Spring").password("Security").roles("USER").build());
        return new InMemoryUserDetailsManager(users);
    }
}

したがって、上記の資格情報を使用してアプリケーションにログインできます。(例:admin / nimda)

注:これは本番環境では使用しないでください。


0

プロジェクトのコードスニペットの下からユーザー名とパスワードを取得してログインし、これが機能することを期待してください。

@Override
    @Bean
    public UserDetailsService userDetailsService() {
        List<UserDetails> users= new ArrayList<UserDetails>();
        users.add(User.withDefaultPasswordEncoder().username("admin").password("admin").roles("USER","ADMIN").build());
        users.add(User.withDefaultPasswordEncoder().username("spring").password("spring").roles("USER").build());
        return new UserDetailsManager(users);
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.