Что такое имя пользователя и пароль при запуске Spring Boot с Tomcat?
когда я развертываю свое приложение Spring через Spring Boot и access 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
?
5 ответов:
Я думаю, что у вас есть Spring Security на вашем пути к классу, а затем spring security автоматически настраивается с пользователем по умолчанию и генерируется пароль
пожалуйста, загляните в свой пом.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 security вы можете взглянуть на 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
если
spring-security
банки добавляются в classpath, а также если это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"); } }
или если вы просто хотите изменить пароль, который вы можете переопределить по умолчанию,
приложение.xml
безопасность.пользователь.пароль=новый_пароль
или
приложение.свойства
spring.security.user.name=<> spring.security.user.password=<>
таким образом, просто добавив зависимость spring boot security starter базовая безопасность уже настроена по умолчанию.
мы можем настроить конфигурацию безопасности, написав нашу собственную авторизацию и аутентификацию. Для этого создайте новый класс SecurityConfig, который расширяет WebSecurityConfigurerAdapter и переопределяет его методы.
@Override public void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication().withUser("javainuse") .password("javainuse").roles("USER"); }
вы также можете запросить у пользователя учетные данные и установить их динамически после запуска сервера (очень эффективно, когда вам нужно опубликовать решение в среде клиента):
@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) обновление - это будет работать на 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(); } }