Самый простой способ (для меня) - сделать @Bean
, использовать WebSecurityConfigurerAdapter
и внедрить WebMvcConfigurer
для настройки всего за несколько шагов. Это самый маленький пример из когда-либо сделанных:
@Configuration
@SpringBootApplication
public class DemoApplication implements WebMvcConfigurer {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Controller
public class HomeController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Model model, Authentication authentication, Principal principal) {
if (authentication == null) {
return "forward:/login";
} else {
model.addAttribute("user", principal.getName());
return "home";
}
}
}
@Bean
public WebSecurityConfigurerAdapter webSecurityConfig() {
return new WebSecurityConfigurerAdapter() {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests()
.anyRequest().authenticated()
.and().formLogin().loginPage("/login")
.defaultSuccessUrl("/")
.permitAll()
.and().logout().permitAll();
http.headers().frameOptions().disable();
}
@Override
protected void configure(AuthenticationManagerBuilder builder) throws Exception {
builder.authenticationProvider(new AuthenticationProvider() {
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String username = authentication.getName();
String password = authentication.getCredentials().toString();
if (username.equals("username") && password.equals("password")) {
List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_USER"));
return new UsernamePasswordAuthenticationToken(username, password, grantedAuthorities);
}
throw new AuthenticationServiceException("Invalid credentials.");
}
@Override
public boolean supports(Class<?> authentication) {
return authentication.equals(UsernamePasswordAuthenticationToken.class);
}
});
}
};
}
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/home").setViewName("home");
registry.addViewController("/login").setViewName("login");
}
}
Вы сказали, что используете thymeleaf
, поэтому допустим, что ваша форма login.html
будет выглядеть примерно так:
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>login example</title>
</head>
<body>
<form th:action="@{/login}" method="post">
<input name="username" placeholder="Username"/> <br/>
<input name="password" placeholder="Password"/> <br/>
<input type="submit" value="Login"/>
</form>
</body>
</html>
И страница home.html
, когда вы вошли в систему:
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>home page</title>
</head>
<body>
Hello, <span th:text="${user}"></span><br>
<a href="/logout"> sign out</a>
</body>
</html>