Я занимаюсь разработкой веб-приложения с весенней загрузкой 2.0.0 и Spring Security 5.0.6, и мне повезло с этим, пока я не добавил некоторую логику, подтверждающую, что пользователь является частью группы LDAP.Если пользователь вводит неверные учетные данные, страница входа снова отображается с ошибкой проверки, но если учетные данные верны, но пользователь не входит в требуемую группу LDAP, приложение перенаправляется на страницу ошибок Whitelabel, которая вместе сэтот заголовок жирным шрифтом показывает это:
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Fri Feb 22 18:40:55 EST 2019
There was an unexpected error (type=Forbidden, status=403).
Forbidden
Это правильная ошибка, поэтому я знаю, что аутентификация работает.Но я хочу остаться на странице входа в систему и не перенаправлять, и я не могу понять, как это сделать.
Весь мой метод настройки для моего WebSecurityConfigurerAdapter показан ниже:
@Override
protected void configure(HttpSecurity http) throws Exception {
// Disabling CSRF because it causes issues with API requests (POSTs don't
// contain the CSRF tokens).
http.csrf().disable();
http.headers().frameOptions().disable();
http.authorizeRequests()
// This line turns off authentication for all management endpoints, which means all
// endpoints that start with "/actuator" (the default starter path for management endpoints
// in spring boot applications). To selectively choose which endpoints to exclude from authentication,
// use the EndpointRequest.to(String ... method, as in the following example:
// .requestMatchers(EndpointRequest.to("beans", "info", "health", "jolokia")).permitAll()
.requestMatchers(EndpointRequest.toAnyEndpoint()).permitAll()
// Do not authenticate resource requests
.antMatchers(
"/app/css/**",
"/app/img/**",
"/app/js/**",
"/app/bootstrap/**").permitAll()
.antMatchers(
"/admin/**",
"/app/builds/**",
"/app/monitor/**",
"/app/review/**")
.hasRole(requiredRole)
// All other requests are authenticated
.anyRequest().authenticated()
// Any unauthenticated request is forwarded to the login page
.and()
.formLogin()
.loginPage(LOGIN_FORM)
.permitAll()
.successHandler(successHandler())
.and()
.exceptionHandling()
.authenticationEntryPoint(delegatingAuthenticationEntryPoint())
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher(LOGOUT_FORM))
.logoutSuccessUrl(LOGIN_FORM);
}
Я открыт для критики конструкции всего этого метода, кстати - я взял на себя этот проект, и это ново для меня.Этот код отлично работал до того, как я ввел 6 строк, заканчивающихся на .hasRole (requiredRole), и он все еще работает, пока пользователь входит в обязательную группу.
Я не предоставил источник для некоторыхиз методов, которые вызываются здесь, и я рад вставить их, если кто-то захочет.Я предполагаю, что кто-то, кто хорошо знает этот материал, сразу же обнаружит проблему.
Любой совет будет оценен.