https://github.com/PKondzierski/4prog
Sorki za rozgrzebanie w projekcie, jest to mój pierwszy większy i staram się jak mogę. AuthentiactionService.js i login.js to są pliki gdzie obsługuje logowanie. Komentarzami wyrzuciłem jak było przez naszą rozmową, w pakiecie security jest reszta javy.
Z tym corsem miałem dużo problemów gdyż nic nie przepuszczało i znalazłem takie rozwiązanie. Nie mam jeszcze za bardzo doświadczenia w springu, ale robie co mogę ;d
Masz tam jakieś bardzo dziwne rzeczy. Powinno być coś w stylu:
http
.cors()
.and()
.csrf()
.disable()
.authorizeRequests()
.antMatchers(HttpMethod.POST, "/admin/**").hasAuthority(ADMIN)
.anyRequest().permitAll();
Ten cały logout nie bardzo ma sens dla basic auth i dziwi mnie trochę że /admin ma tylko POSTowe endpointy, bo ja myśle że będzie miał też GETowe, wiec w ogóle wyrzuciłbym to z tego matchera.
Reszta wygląda w miare ok tak na oko, nie chce mi się teraz tego odpalać zeby się upewnić.
Ale ja bym dla czytelnosci zrobił jeszcze inaczej:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Configuration
@Order(1)
public static class BasicSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors()
.and()
.csrf()
.disable()
.antMatcher("admin/**")
.httpBasic()
.and()
.authorizeRequests()
.antMatchers(HttpMethod.POST, "/admin/**").hasAuthority(ADMIN);
}
}
@Configuration
@Order(10)
public static class NonAuthenticatedPaths extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors()
.and()
.csrf()
.disable()
.authorizeRequests()
.antMatchers("/**")
.permitAll();
}
}
}
Jeśli chodzi o cors to ja zwykle robie:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowCredentials(true);
}
}
Ale bardzo możliwe że ta twoja metoda też działa.
Moja rada: NIE rób wszędzie tych @Service
bo bardzo ciezko coś w takim projekcie znaleźć, szczególnie bez użycia IntelliJ. Zrób sobie klasę @Configuration
gdzie poskładasz sobie obiekty i ewentualnie podeklarujesz jakies @Bean
. Dzięki temu od razu wiadomo co, gdzie i skąd się wzięło.