Я пытаюсь сделать конечную точку доступной без входа в систему с помощью Spring-Security. Но когда я пытаюсь открыть URL-адрес, меня всегда перенаправляют на страницу входа Spring.
Мой класс конфигурации:
@Configuration
@EnableWebSecurity
public class SpringSecurityConfig
{
@Bean
@Order(SecurityProperties.BASIC_AUTH_ORDER)
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception
{
log.debug("securityFilterChain() bean called");
http.authorizeHttpRequests(auth -> {
// auth.requestMatchers("/register").permitAll();
auth.requestMatchers("/register").anonymous();
// auth.requestMatchers("/register").authenticated();
auth.anyRequest().authenticated();
});
http.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.ALWAYS));
http.formLogin(Customizer.withDefaults());
http.httpBasic(Customizer.withDefaults());
http.csrf(AbstractHttpConfigurer::disable);
http.headers(headers -> headers.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable));
return http.build();
}
}
Контроллер:
@Controller
@AllArgsConstructor
@SessionAttributes({"registerError", "redirect"})
public class UserController
{
private AuthenticationService authenticationService;
// @PreAuthorize("permitAll()")
@Transactional
@GetMapping("/register")
public String createUser(ModelMap model, HttpServletRequest request)
{
log.info("createUser() called");
model.put("userDto", new UserDto());
request.getSession().setAttribute("redirect", "redirect:register");
return "signup";
}
// @PreAuthorize("permitAll()")
@Transactional
@PostMapping("/register")
public String registerUser(ModelMap model, HttpServletRequest request, @Valid UserDto userDto)
{
log.info("registerUser() called with userDto={}", userDto);
try {
authenticationService.registerUser(userDto);
} catch (DuplicateKeyException e)
{
model.put("userDto", userDto);
model.put("registerError", "A user with this name already exists.");
return "redirect:register";
}
model.remove("registerError");
request.getSession().removeAttribute("redirect");
return "redirect:/";
}
}
Я настроил свои свойства application.properties следующим образом:
server.port=2345
spring.mvc.servlet.path=/
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
Когда я вхожу в систему и пытаюсь получить доступ к конечной точке /register, я получаю ошибку 403, как и ожидалось, но при выходе из системы я не могу получить доступ к /register. Кто-нибудь знает, что я делаю не так?
Я также пробовал некоторые комбинации с закомментированным кодом, но ничего не активировало конечную точку /register для пользователей, не вошедших в систему. p>
Изменить 1:
Вот журнал отладки, когда я пытаюсь получить доступ/зарегистрироваться без входа в систему:
2024-05-25T22:15:49.800+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.security.web.FilterChainProxy : Securing GET /register
2024-05-25T22:15:49.801+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.s.w.a.AnonymousAuthenticationFilter : Set SecurityContextHolder to anonymous SecurityContext
2024-05-25T22:15:49.801+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.security.web.FilterChainProxy : Secured GET /register
2024-05-25T22:15:49.801+02:00 INFO 10988 --- [nio-2345-exec-3] i.f.l.rest.UserController : createUser() called
2024-05-25T22:15:49.803+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.security.web.FilterChainProxy : Securing GET /WEB-INF/jsp/signup.jsp
2024-05-25T22:15:49.804+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.s.w.s.HttpSessionRequestCache : Saved request http://localhost:2345/WEB-INF/jsp/signup.jsp?continue to session
2024-05-25T22:15:49.804+02:00 DEBUG 10988 --- [nio-2345-exec-3] s.w.a.DelegatingAuthenticationEntryPoint : Trying to match using And [Not [RequestHeaderRequestMatcher [expectedHeaderName=X-Requested-With, expectedHeaderValue=XMLHttpRequest]], MediaTypeRequestMatcher [contentNegotiationStrategy=org.springframework.web.accept.ContentNegotiationManager@1c96bf1e, matchingMediaTypes=[application/xhtml+xml, image/*, text/html, text/plain], useEquals=false, ignoredMediaTypes=[*/*]]]
2024-05-25T22:15:49.805+02:00 DEBUG 10988 --- [nio-2345-exec-3] s.w.a.DelegatingAuthenticationEntryPoint : Match found! Executing org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint@30b075b9
2024-05-25T22:15:49.805+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.s.web.DefaultRedirectStrategy : Redirecting to http://localhost:2345/login
2024-05-25T22:15:49.818+02:00 DEBUG 10988 --- [nio-2345-exec-4] o.s.security.web.FilterChainProxy : Securing GET /login
А это журнал отладки для вошедшего в систему пользователя, обращающегося к /register. Выдает ошибку 403:
2024-05-25T22:19:08.569+02:00 DEBUG 10988 --- [nio-2345-exec-2] o.s.security.web.FilterChainProxy : Securing GET /register
2024-05-25T22:19:08.569+02:00 DEBUG 10988 --- [nio-2345-exec-2] w.c.HttpSessionSecurityContextRepository : Retrieved SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=fi0x, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, CredentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN, ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=158EB00290A0B4AF205677B2E9C8BD54], Granted Authorities=[ROLE_ADMIN, ROLE_USER]]]
2024-05-25T22:19:08.569+02:00 DEBUG 10988 --- [nio-2345-exec-2] o.s.s.w.access.AccessDeniedHandlerImpl : Responding with 403 status code
2024-05-25T22:19:08.570+02:00 DEBUG 10988 --- [nio-2345-exec-2] o.s.security.web.FilterChainProxy : Securing GET /error
2024-05-25T22:19:08.571+02:00 DEBUG 10988 --- [nio-2345-exec-2] w.c.HttpSessionSecurityContextRepository : Retrieved SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=fi0x, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, CredentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN, ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=158EB00290A0B4AF205677B2E9C8BD54], Granted Authorities=[ROLE_ADMIN, ROLE_USER]]]
2024-05-25T22:19:08.571+02:00 DEBUG 10988 --- [nio-2345-exec-2] o.s.security.web.FilterChainProxy : Secured GET /error
2024-05-25T22:19:10.418+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.security.web.FilterChainProxy : Securing GET /register
2024-05-25T22:19:10.419+02:00 DEBUG 10988 --- [nio-2345-exec-3] w.c.HttpSessionSecurityContextRepository : Retrieved SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=fi0x, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, CredentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN, ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=158EB00290A0B4AF205677B2E9C8BD54], Granted Authorities=[ROLE_ADMIN, ROLE_USER]]]
2024-05-25T22:19:10.419+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.s.w.access.AccessDeniedHandlerImpl : Responding with 403 status code
2024-05-25T22:19:10.419+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.security.web.FilterChainProxy : Securing GET /error
2024-05-25T22:19:10.419+02:00 DEBUG 10988 --- [nio-2345-exec-3] w.c.HttpSessionSecurityContextRepository : Retrieved SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=fi0x, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, CredentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN, ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=158EB00290A0B4AF205677B2E9C8BD54], Granted Authorities=[ROLE_ADMIN, ROLE_USER]]]
2024-05-25T22:19:10.419+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.security.web.FilterChainProxy : Secured GET /error
Подробнее здесь: https://stackoverflow.com/questions/785 ... ot-working
Spring-Security: конечные точки в белом списке не работают [закрыто] ⇐ JAVA
Программисты JAVA общаются здесь
1716668442
Anonymous
Я пытаюсь сделать конечную точку доступной без входа в систему с помощью Spring-Security. Но когда я пытаюсь открыть URL-адрес, меня всегда перенаправляют на страницу входа Spring.
Мой класс конфигурации:
@Configuration
@EnableWebSecurity
public class SpringSecurityConfig
{
@Bean
@Order(SecurityProperties.BASIC_AUTH_ORDER)
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception
{
log.debug("securityFilterChain() bean called");
http.authorizeHttpRequests(auth -> {
// auth.requestMatchers("/register").permitAll();
auth.requestMatchers("/register").anonymous();
// auth.requestMatchers("/register").authenticated();
auth.anyRequest().authenticated();
});
http.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.ALWAYS));
http.formLogin(Customizer.withDefaults());
http.httpBasic(Customizer.withDefaults());
http.csrf(AbstractHttpConfigurer::disable);
http.headers(headers -> headers.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable));
return http.build();
}
}
Контроллер:
@Controller
@AllArgsConstructor
@SessionAttributes({"registerError", "redirect"})
public class UserController
{
private AuthenticationService authenticationService;
// @PreAuthorize("permitAll()")
@Transactional
@GetMapping("/register")
public String createUser(ModelMap model, HttpServletRequest request)
{
log.info("createUser() called");
model.put("userDto", new UserDto());
request.getSession().setAttribute("redirect", "redirect:register");
return "signup";
}
// @PreAuthorize("permitAll()")
@Transactional
@PostMapping("/register")
public String registerUser(ModelMap model, HttpServletRequest request, @Valid UserDto userDto)
{
log.info("registerUser() called with userDto={}", userDto);
try {
authenticationService.registerUser(userDto);
} catch (DuplicateKeyException e)
{
model.put("userDto", userDto);
model.put("registerError", "A user with this name already exists.");
return "redirect:register";
}
model.remove("registerError");
request.getSession().removeAttribute("redirect");
return "redirect:/";
}
}
Я настроил свои свойства application.properties следующим образом:
server.port=2345
spring.mvc.servlet.path=/
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
Когда я вхожу в систему и пытаюсь получить доступ к конечной точке /register, я получаю ошибку 403, как и ожидалось, но при выходе из системы я не могу получить доступ к /register. Кто-нибудь знает, что я делаю не так?
Я также пробовал некоторые комбинации с закомментированным кодом, но ничего не активировало конечную точку /register для пользователей, не вошедших в систему. p>
Изменить 1:
Вот журнал отладки, когда я пытаюсь получить доступ/зарегистрироваться без входа в систему:
2024-05-25T22:15:49.800+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.security.web.FilterChainProxy : Securing GET /register
2024-05-25T22:15:49.801+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.s.w.a.AnonymousAuthenticationFilter : Set SecurityContextHolder to anonymous SecurityContext
2024-05-25T22:15:49.801+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.security.web.FilterChainProxy : Secured GET /register
2024-05-25T22:15:49.801+02:00 INFO 10988 --- [nio-2345-exec-3] i.f.l.rest.UserController : createUser() called
2024-05-25T22:15:49.803+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.security.web.FilterChainProxy : Securing GET /WEB-INF/jsp/signup.jsp
2024-05-25T22:15:49.804+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.s.w.s.HttpSessionRequestCache : Saved request http://localhost:2345/WEB-INF/jsp/signup.jsp?continue to session
2024-05-25T22:15:49.804+02:00 DEBUG 10988 --- [nio-2345-exec-3] s.w.a.DelegatingAuthenticationEntryPoint : Trying to match using And [Not [RequestHeaderRequestMatcher [expectedHeaderName=X-Requested-With, expectedHeaderValue=XMLHttpRequest]], MediaTypeRequestMatcher [contentNegotiationStrategy=org.springframework.web.accept.ContentNegotiationManager@1c96bf1e, matchingMediaTypes=[application/xhtml+xml, image/*, text/html, text/plain], useEquals=false, ignoredMediaTypes=[*/*]]]
2024-05-25T22:15:49.805+02:00 DEBUG 10988 --- [nio-2345-exec-3] s.w.a.DelegatingAuthenticationEntryPoint : Match found! Executing org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint@30b075b9
2024-05-25T22:15:49.805+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.s.web.DefaultRedirectStrategy : Redirecting to http://localhost:2345/login
2024-05-25T22:15:49.818+02:00 DEBUG 10988 --- [nio-2345-exec-4] o.s.security.web.FilterChainProxy : Securing GET /login
А это журнал отладки для вошедшего в систему пользователя, обращающегося к /register. Выдает ошибку 403:
2024-05-25T22:19:08.569+02:00 DEBUG 10988 --- [nio-2345-exec-2] o.s.security.web.FilterChainProxy : Securing GET /register
2024-05-25T22:19:08.569+02:00 DEBUG 10988 --- [nio-2345-exec-2] w.c.HttpSessionSecurityContextRepository : Retrieved SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=fi0x, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, CredentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN, ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=158EB00290A0B4AF205677B2E9C8BD54], Granted Authorities=[ROLE_ADMIN, ROLE_USER]]]
2024-05-25T22:19:08.569+02:00 DEBUG 10988 --- [nio-2345-exec-2] o.s.s.w.access.AccessDeniedHandlerImpl : Responding with 403 status code
2024-05-25T22:19:08.570+02:00 DEBUG 10988 --- [nio-2345-exec-2] o.s.security.web.FilterChainProxy : Securing GET /error
2024-05-25T22:19:08.571+02:00 DEBUG 10988 --- [nio-2345-exec-2] w.c.HttpSessionSecurityContextRepository : Retrieved SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=fi0x, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, CredentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN, ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=158EB00290A0B4AF205677B2E9C8BD54], Granted Authorities=[ROLE_ADMIN, ROLE_USER]]]
2024-05-25T22:19:08.571+02:00 DEBUG 10988 --- [nio-2345-exec-2] o.s.security.web.FilterChainProxy : Secured GET /error
2024-05-25T22:19:10.418+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.security.web.FilterChainProxy : Securing GET /register
2024-05-25T22:19:10.419+02:00 DEBUG 10988 --- [nio-2345-exec-3] w.c.HttpSessionSecurityContextRepository : Retrieved SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=fi0x, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, CredentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN, ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=158EB00290A0B4AF205677B2E9C8BD54], Granted Authorities=[ROLE_ADMIN, ROLE_USER]]]
2024-05-25T22:19:10.419+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.s.w.access.AccessDeniedHandlerImpl : Responding with 403 status code
2024-05-25T22:19:10.419+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.security.web.FilterChainProxy : Securing GET /error
2024-05-25T22:19:10.419+02:00 DEBUG 10988 --- [nio-2345-exec-3] w.c.HttpSessionSecurityContextRepository : Retrieved SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=fi0x, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, CredentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN, ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=158EB00290A0B4AF205677B2E9C8BD54], Granted Authorities=[ROLE_ADMIN, ROLE_USER]]]
2024-05-25T22:19:10.419+02:00 DEBUG 10988 --- [nio-2345-exec-3] o.s.security.web.FilterChainProxy : Secured GET /error
Подробнее здесь: [url]https://stackoverflow.com/questions/78531745/spring-security-whitelisted-endpoints-not-working[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия