inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링부트 시큐리티 & JWT 강의

스프링부트 시큐리티 4강 - 시큐리티 로그인

/loginForm?error가 발생하며 로그인이 안 됩니다.

1994

노래하는 나무

작성한 질문수 1

0

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("/");
    }

spring spring-security jwt

답변 5

0

bandisnc

저도 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

저도 같은 에러를 겪어서 Github 소스코드랑 비교했는데 잘 돌아가더라구요. 비교해보니 저는 PrincipalDetailsService에서 @Service Annotation을 빼먹었더라구요. 서비스가 IoC가 안됬으니 로그인이 안되는 게 당연하고...

혹은 PrincipalDetails에서 전부 return true;로 되어있는지 확인해보세요.

0

김진우

혹시 스프링 부트 몇 버전인가요?

WebSecurityConfigurerAdapter 는 이제 사용하지 않는 걸로 알고있습니다

이 강의가 꽤 오래 전 강의라서 스프링 시큐리티가 많이 바꼈더라고요..

0

노래하는 나무

2.7.10입니다!!
그러면 코드 자체를 바꿔야할까요??

0

김진우

우선

http://localhost:8080/loginForm?error

라고 뜨는 것은 로그인 시 잘못된 아이디와 비밀번호를 입력했을 때 스프링 시큐리티가 자동적으로 보내주는 파라미터인 것 같습니다. 그래서 이건 정상 동작입니다.

혹시 아이디와 비밀번호를 입력했을 때 화이트 라벨 에러 페이지가 나오나요?

 

0

Son Soungmin

제가 빠트렸던건 저 부분이라서 에러가 발생했었는데 그외는 잘 모르겠네요 하루가 지났으니 저장과 서버 재실행은 무조건하셨을거같은데 에러로그를 상세히 보여주셔야 다른분들도 도와주실수있을거같아요!

0

노래하는 나무

콘솔에 에러 메세지 자체가 안 뜨고 저렇게 url 창에서만 error 라고 나옵니다ㅠㅠ

그래서 원인을 찾기가 너무 어렵네요..

0

Son Soungmin

application.yml 파일에
jpa ddl-auto: create 에서 update로 바꾸셨나요??

0

노래하는 나무

네!! 이미 그렇게 되어 있습니다.ㅠㅠ

JWT를 구현한 다음 이 API를 호출해서 사용하는 것은 프론트엔드 쪽에서 하는 역할인가요?

0

94

1

Jwt쓰면 스프링시큐리티는 필수적으로 사용해야하나요?

0

401

1

13:23 system.out 출력문이 다르게 나옵니다.

0

130

1

수료증 문의

0

226

2

9분대에 질문이 있습니다 !

0

114

1

password 비교를 하지 않았는데 어떻게 인증이 통과된 건가요?

0

320

1

이전 강의 참고하라는 말씀

0

253

1

강의 실습하다가 막히는 분들 참고(2024년8월 기준)

2

1116

2

구글 소셜 로그인 302

0

200

1

오류 문의 _ org.springframework.orm.jpa.JpaSystemException: could not deserialize

1

584

1

[자바] 시큐리티 Config 참고

13

953

1

이론강의

0

280

1

SpringSecurity JWT 로그인 URL 2개 설정하는 방법

0

487

1

2024.06기준) 최근 SecurityConfig 설정 문의

0

921

3

구글 로그인시 authentication이 null 값이라고 에러가 발생합니다.

0

677

2

특정 url필터 거는 방법 이슈

0

422

1

강사님께서 말씀하시는 시큐리티세션이 SecurityContext인가요?

0

277

1

25강 마지막 테스트에서 오류

1

1044

2

jwt를 저장하는 위치에 궁금한 점이 있습니다.

0

298

1

mustache를 사용하지 않고 thymeleaf를 사용하려고 하는데

0

696

1

세션 인증방식이 REST 원칙에 위배되는 건가요?

0

338

1

jwt와 실제데이터의 관계

1

242

1

jwt 와 세션ID의 관계

1

312

1

SecurityConfig에서 세션 설정, 인가 설정

0

417

1