Java Spring : Spring Security

김선미·2022년 7월 3일
0

Spring Security framework

  • 스프링 서버에 필요한 인증 및 인가를 위한 기능을 제공한다.
  • build.gradle 코드 추가
	// 스프링 시큐리티
    implementation 'org.springframework.boot:spring-boot-starter-security'
    // Thymeleaf (뷰 템플릿 엔진)
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
  • WebSecurityConfig.java 파일 생성
  • 에러 발생 (WebSecurityConfigurerAdapter)
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 
//WebSecurityConfigurerAdapter는 더이상 사용되지 않는 기능으로 실행 안됨
    @Override
    protected void configure(HttpSecurity http) throws 
    Exception {
        http.csrf().disable();
        http.headers().frameOptions().disable();

        http.authorizeRequests()
                .antMatchers("/images/**").permitAll()
                .antMatchers("/css/**").permitAll()
                .anyRequest().authenticated() 
                .and()
                .formLogin() 
                .loginPage("/user/login") 
                .failureUrl("/user/login/error") 
                .defaultSuccessUrl("/")
                .permitAll()
                .and()
                .logout()
                .permitAll();
    }
}
  • 코드 수정(WebSecurityConfigurerAdapter는 더이상 사용되지 않는 기능이므로 SecurityFilterChain 기능을 사용하는 코드로 변경)
  • 참고 포스팅
@RequiredArgsConstructor
@EnableWebSecurity // 스프링 Security 지원을 가능하게 함
@Configuration(proxyBeanMethods = false)
@ConditionalOnDefaultWebSecurity
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
public class WebSecurityConfig {

    @Bean
    @Order(SecurityProperties.BASIC_AUTH_ORDER)
    protected SecurityFilterChain filterChain(HttpSecurity http) throws 
    Exception {
        http.csrf().disable();
        http.headers().frameOptions().disable();

        http.authorizeRequests()
				.antMatchers("/images/**").permitAll()
                // image 폴더를 login 인증 없이 허용
                .antMatchers("/css/**").permitAll()
                // css 폴더를 login 인증 없이 허용
                .anyRequest().authenticated() 
                // 모든 요청에 대해 로그인 인증 필요 
                //(인증 없을 시 요청 불가, 예: css 파일 요청 등)
                .and()
                .formLogin() 
                // 스프링 시큐리티 기본 로그인 기능 제공
                .loginPage("/user/login") 
                //구현한 로그인 페이지 UI로 이동
                .failureUrl("/user/login/error") 
                //구현한 로그인 에러 페이지 UI로 이동
                .defaultSuccessUrl("/")
                .permitAll()
                .and()
                .logout()
                .permitAll();

        return http.build();
    }
}
  • application.properties
spring.thymeleaf.prefix=classpath:/static/
// thymeleaf 뷰 템플릿 경로를 프로젝트 static 폴더로 지정
  • UserController.java
@Controller
public class UserController {

    // 회원 로그인 페이지
    @GetMapping("/user/login")
    public String login() {
        return "login"; 
        // thymeleaf 뷰 템플릿에 의해 string으로 login을 반환하면
        // static 폴더의 login.html이 실행됨 
    }

		@GetMapping("/user/login/error")
    public String loginError(Model model) {
        model.addAttribute("loginError", true);
        return "login";
    }

    // 회원 가입 페이지
    @GetMapping("/user/signup")
    public String signup() {
        return "signup";
    }
}
profile
백엔드 개발 공부

0개의 댓글