JAVA/SPRING

[spring security]레거시 프로젝트에 스프링 시큐리티를 적용해보자.(1)

gracelove91 2019. 9. 14. 00:44

레거시 프로젝트는 의존성관리를 메이븐에 맡긴다해도 일일이 추가해줘야하기 떄문에 매우 귀찮다 ㅠ
따라서 스프링 부트의 spring-boot-starter-security의 자식들을 추가해주겠다.

이외에도 spring-aop가 있지만, spring-webmvc에 종속되어있기떄문에 따로 추가는 안했다.

다음으로 시큐리티 설정을 해보자.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .mvcMatchers("/", "/index").permitAll() //이와 같은 요청에는 모든 사용자가 접근가능하다.
                .anyRequest().authenticated(); //위와 같이 permit을 준 요청 이외 어떤 요청이든 인증이 필요하다.
    }
}

이렇게 코딩을 해도 모든 uri 요청이 다 허용된다. 왜냐면 필터를 안걸어줬기 떄문.
web.xml에 다음과 같이 추가해주자. (한글 인코딩이 깨질 수 있으니 encodingFilter 밑에 추가해줄 것.)

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

접속해보자. /index, / 외 요청에는 403 Access Denied 이 뜨는 걸 볼 수 있다.

/index/ 요청은 잘 먹히지만 css가 깨진다
그 이유는 css와 같은 정적리소스 파일들은 /resources 에 매핑되는데, 여기도 권한을 줘야한다 코드를 바꿔보자

        http.authorizeRequests()
                .mvcMatchers("/resources/**").permitAll()
                .mvcMatchers("/", "/index").permitAll()
                .anyRequest().authenticated();
        http.formLogin();        //기본적인 로그인 form을 사용하겠다.

/resources 요청에 모든 사용자가 접근 가능하게 코드를 바꿨다.
css가 더이상 안깨진다.