[기초 API 구현 2] - 스프링 시큐리티 적용

박성규·2022년 5월 27일
0

[스프링 부트]

목록 보기
23/38
post-thumbnail
  1. gradle 추가
implementation 'org.springframework.boot:spring-boot-starter-security'

2.UserController 추가

package com.spring.loginprac.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class UserController {

    // 회원 로그인 페이지
    @GetMapping("/user/login")
    public String login() {
        return "login";
    }

    // 회원 가입 페이지
    @GetMapping("/user/signup")
    public String signup() {
        return "signup";
    }
}
  1. WebSecurityConfig 추가
package com.spring.loginprac.security;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity // 스프링 Security 지원을 가능하게 함
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) {
        // h2-console 사용에 대한 허용 (CSRF, FrameOptions 무시)
        web
                .ignoring()
                .antMatchers("/h2-console/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 회원 관리 처리 API (POST /user/**) 에 대해 CSRF 무시
        http.csrf()
                .ignoringAntMatchers("/user/**");

        http.authorizeRequests()
                    // image 폴더를 login 없이 허용
                    .antMatchers("/images/**").permitAll()
                    // css 폴더를 login 없이 허용
                    .antMatchers("/css/**").permitAll()
                    // 회원 관리 처리 API 전부를 login 없이 허용
                    .antMatchers("/user/**").permitAll()
                    // 그 외 어떤 요청이든 '인증'
                    .anyRequest().authenticated()
                .and()
                    // 로그인 기능
                    .formLogin()
                    .loginPage("/user/login")
                    .defaultSuccessUrl("/")
                    .failureUrl("/user/login?error")
                    .permitAll()
                .and()
                    // 로그아웃 기능
                    .logout()
                .permitAll();
    }
}

시큐리티를 적용시키는것 자체는 크게 어렵지 않다.

하지만, 시큐리티가 너무 통제를 많이한다..
css 적용 절대 금지~
이미지? 절대 안됨~
다른페이지? 절대안됨~~

통제가 너무 심한듯 하지만 전체를 통제해놓고 내가 필요한 부분만 해제하는것이 더 안정적이라는 생각도 든다.

일단 user에 해당하는 url에 대해선 해제했다.

0개의 댓글

관련 채용 정보