Я создаю проект с пружинной защитой для входа в систему, это часть моего проекта, я хочу использовать пользовательскую страницу входа в систему и провайдера нестандартной аутентификации. Я искал учебники, но я закончил на странице показа нестандартной авторизации. вверх, но пользователь не может войти в систему (доступ запрещен) вместо этого получил в трассировке стека, вот мой код, я предпочитаю полную конфигурацию Java.
это мой класс конфигурации безопасности
@Configuration
@EnableWebSecurity
@ComponentScan("id.config.configPack")
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Autowired
private CustomAuthenticationProvider authProvider;
@Override
protected void configure(
AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authProvider);
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http
.authorizeRequests()
.antMatchers("/resources/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/menu")
.permitAll()
.and()
.logout()
.permitAll();
}
}
это для инициализации проекта
public class SecurityWebApplicationInitializer extends
AbstractSecurityWebApplicationInitializer {
public SecurityWebApplicationInitializer() {
super(SecurityConfig.class);
}
}
это мой пользовательский поставщик аутентификации
@Component
public class CustomAuthenticationProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication)
throws AuthenticationException {
String user = authentication.getName();
String password = authentication.getCredentials().toString();
List<GrantedAuthority> grantedAuths = new ArrayList<>();
grantedAuths.add(new SimpleGrantedAuthority("ROLE_USER"));
if (user.equalsIgnoreCase("test") && password.equals("test")) {
return new UsernamePasswordAuthenticationToken
(user, password, grantedAuths);
} else {
throw new BadCredentialsException("Authentication failed");
}
}
@Override
public boolean supports(Class<?> authentication) {
return authentication.equals(
UsernamePasswordAuthenticationToken.class);
}
}
это моя страница входа в систему, я не указал действие, потому что, насколько я знаю, Spring Security берет это под контроль, CMIW.
<form id="loginForm" class="login-form">
<input name="username" type="text" placeholder="Username" />
<input name="password" type="password" placeholder="Password" />
<button type="submit">Submit</button>
<br />
<br />
<span id="err" class="errMsg"></span>
</form>
Я также определил класс контроллера для страницы входа и для успешной страницы входа.
мой ожидаемый результат - я могу войти в систему и перенаправить на обработчик успеха входа по умолчанию в моей конфигурации безопасности, есть ли какой-нибудь код, который отсутствует или требуется?
Спасибо