У меня есть следующий код со мной Я пытаюсь достичь аутентификации ldap, но я думаю, что этого не происходит.Как достичь аутентификации Ldap с использованием весенней безопасности (весенний ботинок)
Мои настройки безопасности
@EnableWebSecurity
@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class Config extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().and().authorizeRequests().antMatchers("/*")
.permitAll().anyRequest().authenticated().and().csrf()
.disable().httpBasic().and().csrf()
.csrfTokenRepository(csrfTokenRepository()).and()
.addFilterAfter(csrfHeaderFilter(), CsrfFilter.class);
}
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.ldapAuthentication()
.userSearchFilter("(uid={0})")
.userSearchBase("dc=intern,dc=xyz,dc=com")
.contextSource()
.url("ldap://192.168.11.11:1234/dc=intern,dc=xyz,dc=com")
.managerDn("username")
.managerPassword("password!")
.and()
.groupSearchFilter("(&(objectClass=user)(sAMAccountName=" + "username" + "))");
}
private Filter csrfHeaderFilter() {
return new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
CsrfToken csrf = (CsrfToken) request
.getAttribute(CsrfToken.class.getName());
if (csrf != null) {
Cookie cookie = WebUtils.getCookie(request, "XSRF-TOKEN");
String token = csrf.getToken();
if (cookie == null || token != null
&& !token.equals(cookie.getValue())) {
cookie = new Cookie("XSRF-TOKEN", token);
cookie.setPath("/");
response.addCookie(cookie);
response.sendRedirect("/notAllowed");
}
}
filterChain.doFilter(request, response);
}
};
}
private CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
}
}
Мой контроллер
@RequestMapping(value = { "/test" }, method = RequestMethod.GET)
public @ResponseBody String retrieve() {
System.out.println("line 1");
System.out.println("line 2");
return "hello";
}
@RequestMapping(value = { "/notAllowed" }, method = RequestMethod.GET)
public @ResponseBody HttpStatus login() {
return HttpStatus.FORBIDDEN;
}
я стремлюсь:
я хочу добиться аутентификации LDAP. U имя пользователя и пароль будут получены от браузера, хотя я пробовал и с жестко запрограммированным именем пользователя и паролем.
если пользователь является подлинным то фильтр будет проверять санкционирование проверки маркера.
если это первый запрос затем новый маркер будет сгенерирован и послал. , если его не найден затем он отправит HTTP-статус запрещен.
У меня есть следующие проблемы:
, когда я запускаю первый раз из браузера возвращается запрещено, но он также печатает «линия 1 и линия 2» в консоли, хотя это не возвращает привет, но запрещено.
Мое htpSecurity и ldap Конфигурация отлично ?.
от 2-го запроса всегда возвращают привет, я попытался открыть новую вкладку, новый запрос, но до сих пор она работает нормально .Если я перезапустить сервер только тогда он генерирует маркер и сравнить его с печеньем token.what если два человека используют одну и ту же систему (разное время).
как именно я могу проверить аутентификацию ldap? Я использую POSTMAN в качестве клиента.
Если какая-либо информация отсутствует в моем конце, пожалуйста, дайте мне знать. И я буду благодарен за ваши ответы.
у вас все еще есть проблемы? Если бы мой ответ не помог, пожалуйста, дайте мне знать. –