-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
/loginForm?error가 발생하며 로그인이 안 됩니다.
23.09.18 20:46 작성 조회수 1.05k
0
4강을 수강하는 중에 생긴 오류입니다.
회원가입은 정상적으로 작동하는데 로그인을 하려고 하면 아래 사진처럼 오류가 발생합니다.강의를 여러번 돌려보며 코드는 똑같이 따라했고, 콘솔에 찍히는 것을 보면 제가 로그인 하고자 하는 username도 잘 찍힙니다. (회원 정보를 찾는 것까지는 정상적인 거 같습니다)
import org.springframework.boot.web.servlet.view.MustacheViewResolver;
// 이 import문에서 reactive로 하라고 하셨는데 그걸로 바꾸면 아래의 setCharset, setContentType 등에서 오류가 발생하여 servlet으로 하였습니다.
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
MustacheViewResolver resolver = new MustacheViewResolver();
resolver.setCharset("UTF-8");
resolver.setContentType("text/html;charset=UTF-8");
resolver.setPrefix("classpath:/templates/");
resolver.setSuffix(".html");
registry.viewResolver(resolver);
}
}
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public BCryptPasswordEncoder encodePwd(){
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/user/**").authenticated()
.antMatchers("/manager/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_MANAGER')")
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
.anyRequest().permitAll()
.and()
.formLogin()
.loginPage("/loginForm")
.loginProcessingUrl("/login")
.defaultSuccessUrl("/");
}
답변을 작성해보세요.
0
bandisnc
2024.02.17
저도 db에 생성한 계정이 있고 , 로그인시도시 loginForm?error로 이동되는 현상이 있었습니다.
SpringSecurity가 버전업으로 기존 방식이 deprecated되어서
authorizeHttpRequests(Customizer...)가 제공하는 템플릿에 강의 내용을 적용했었는데요.
이 템플릿 하단에 첨부되었던 userDetailService 블럭을 주석처리하여 해결하였습니다.
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf((csrf)->csrf.disable())
.authorizeHttpRequests((authorizeHttpRequests) ->
authorizeHttpRequests
.requestMatchers("/user/**").authenticated()
.requestMatchers("/admin/**").hasRole("ADMIN")
.requestMatchers("/manager/**").hasAnyRole("ADMIN", "MANAGER")
.anyRequest().permitAll()
)
.formLogin((formLogin) ->
formLogin
// .usernameParameter("username") // 파라미터로 보낼 이름값 설정하는 부분. username이라고 안쓰고 다른이름 쓰고 싶은 경우 for loadUserByUsername
// .passwordParameter("password")
.loginPage("/login")
// .failureUrl("/authentication/login?failed")
.loginProcessingUrl("/loginProc") // login주소가 호출되면 시큐리티가 낚아채서 대신 로그인 진행
.defaultSuccessUrl("/")
);
return http.build();
}
// auth에서 따로 관리하므로 해당 Bean은 불필요하다.
// @Bean
// public UserDetailsService userDetailsService() {
// PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
// String pw = encoder.encode("password");
// UserDetails user = User.withUsername("user")
// .password("1234")
// .roles("USER")
// .build();
// UserDetails admin = User.withUsername("admin")
// .password("password")
// .roles("ADMIN", "USER")
// .build();
//
// return new InMemoryUserDetailsManager(user, admin);
// }
0
gapingbeaver1440
2023.10.11
저도 같은 에러를 겪어서 Github 소스코드랑 비교했는데 잘 돌아가더라구요. 비교해보니 저는 PrincipalDetailsService에서 @Service Annotation을 빼먹었더라구요. 서비스가 IoC가 안됬으니 로그인이 안되는 게 당연하고...
혹은 PrincipalDetails에서 전부 return true;로 되어있는지 확인해보세요.
0
김진우
2023.09.19
혹시 스프링 부트 몇 버전인가요?
WebSecurityConfigurerAdapter 는 이제 사용하지 않는 걸로 알고있습니다
이 강의가 꽤 오래 전 강의라서 스프링 시큐리티가 많이 바꼈더라고요..
김진우
2023.09.20
우선
http://localhost:8080/loginForm?error
라고 뜨는 것은 로그인 시 잘못된 아이디와 비밀번호를 입력했을 때 스프링 시큐리티가 자동적으로 보내주는 파라미터인 것 같습니다. 그래서 이건 정상 동작입니다.
혹시 아이디와 비밀번호를 입력했을 때 화이트 라벨 에러 페이지가 나오나요?
0
Son Soungmin
2023.09.19
제가 빠트렸던건 저 부분이라서 에러가 발생했었는데 그외는 잘 모르겠네요 하루가 지났으니 저장과 서버 재실행은 무조건하셨을거같은데 에러로그를 상세히 보여주셔야 다른분들도 도와주실수있을거같아요!
0
답변 5