[SpringBoot] 스프링 시큐리티 설정 주의할점

     스프링 시큐리티 첫 적용하면서 뻘짓하며 시간을 날려먹은거에 대한 기록입니다.

     

    1. custm login폼 사용시 name 설정

    스프링 시큐리티는 로그인폼을 커스텀하여 사용하면 기본폼에서 사용하던 아이디가 username이 아닐수 있다. 나는 email을 사용해서 input태그도 아래 처럼 변경하였다.

    <input type="email" class="form-control" name="email">

     

     

    하지만 로그인시 호출되는 매개변수 String email 값이 절대로 안넘어 오는 것이 었다. 

     

    그 이유는 스프링 시큐리티는 input 태그의 name이 꼭 username 이어야 위 파라미터 값을 가져오는 것이였고 간단하게 설정하려면 input type의 name만 username만 바꿔도 되지만 찜찜해서 email로 꼭 바꾸고 싶었다. 변경방법은 filterChain에서 formLogin 설정에서 usernameParameter()를 이용하면 된다.

    이 값이 input type 태그의 name이어야 loadUserByUsername() 함수의 파라미터 값을 가져올 수 있다.

     

     

    2. html에서 script파일 못불러오는 문제

    html에서 태그의 src 속성으로 script 파일을 불러오려고 했지만 아래 에러가 계속 났다. 처음엔 시큐리티 때문에 나는 문제인지 모르고 별에 별짓을 다해봤지만 도저히 해결되지않아 혹시 시큐리티 문제인가 하고 anyRequest().authenticated() 에서 anyRequest().permitAll() 로 변경했더니 해결이 됐다.

    Refused to execute script from 'http://localhost:8080/login' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.

     

    script 파일을 불러올때도 시큐리티 적용 되는구나 하고 이해를 했고 스프링 시큐리티 기능 비활성화 기능을 사용하여 정적 파일들은 시큐리티 비활성화를 하였다.

     

    @Bean
    public WebSecurityCustomizer configure() {
        return (web -> web.ignoring()
        	.requestMatchers(PathRequest.toStaticResources().atCommonLocations()));
    }

    위 소스로 정적 리소스 들은 모두 시큐리티 사용을 비활성화 한다.

     

    ※ 원래는 WebSecurityConfigureerAdapter를 상속받아서 설정해야 했지만 컴포넌트 기반 보안 구성 지향하고 있기 때문에 SpringSecurity 5.7 부터는 WebSecurityConfigureerAdapter가 deprecated 되었다. 

    그리고 permitAll()로 해결하는 방법도 있지만 permitAll()은 인증절차를 거치기 때문에 인증 절차가 필요 없는 정적 리소스는 ignoring() 하는게 더 효율적이다.

     

    참고 : https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter

    댓글

    Designed by JB FACTORY