온 코딩

[Spring Security] - Spring Secrete, Spring Security, sts 본문

복습 ARCHIVE/모델별 프로젝트

[Spring Security] - Spring Secrete, Spring Security, sts

SummerON 2021. 7. 19. 14:54

1. SecurityConfig

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

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
	
	@Override
	protected void configure(HttpSecurity security) throws Exception {
		// 매개변수 security을 통해 전달받은 HttpSecurity 객체를 이용하여 인증, 인가를 제어
		security.authorizeRequests().antMatchers("/").permitAll();
		security.authorizeRequests().antMatchers("/member").authenticated();  // 인증된
		security.authorizeRequests().antMatchers("/manager").hasRole("MANAGER"); // 인가하기 위한 규칙
		security.authorizeRequests().antMatchers("/admin").hasRole("ADMIN");  // 인가하기 위한 규칙
		
		// 크로스 사이트 위조 요청에 대한 설정 : csrf()
		
		security.csrf().disable();  // RESTful 을 사용하기위해서는 CSRF 기능을 비활성화 해야한다..
		//스프링 시큐리티가 제공하는 인증 로그인 화면을 사용하지 않을 경우
		security.formLogin().loginPage("/login").defaultSuccessUrl("/loginSuccess",true);
				
		//접근 권한 없음 페이지 처리
		security.exceptionHandling().accessDeniedPage("/accessDenied");
		
		//
		security.logout().invalidateHttpSession(true).logoutSuccessUrl("/login"); 
	}

}



 url별 시큐리티화면 구성
 / - 인증하지 않은 모든 사용자가 접근 가능
 /member - 인증을 통과한 사용자만 접근 가능
 /manager - 인증을 통과했고, MANAGER권한을 가진 사용자만 접근 가능
 /admin - 인증을 통과했고, ADMIN 권한을 가진 사용자만 접근가능


  1. 특정 경로에 대한 권한을 가진 사용자만 접근을 허용할 경우
  AuthorizedUrl은 HttpSecurity의 authorizeRequest()를 호출할 때 리턴되는 ExpressionInterceptUrlREgistry의 antMatchers()메소드를 통해 얻어낸다.
  
  authorizedRequest() : 사용자 인증, 권 설정 
  autMatchers("url패턴") : 매칭되는 URL패턴들에 대한 접근 허용
   =>permitAll() : 모든 사용자에 대한 접근 허용
   =>hasRole("권한이름") : 특정 권한을 가진 사용자만 접근 허용 
  
  크로스 사이트 요청 위조 방지
1. 이름 : CSRF (Cross Site Request Forgery)
2. 내용 : 요청이 발생했을 때, 서버에서 요청에 대한 주체와 요청 절차에 대한 검증을 하지 않고 
           요청을 처리했을 경우 발생

-----------------------------------------------------

RESTfull

REST : 자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미     
         자원 : 넒은 의미로 소프트웨어가 관리하는 모든 것 (그림, 문서, 데이터 등)
                 DB에 학생 정보가 저장되어 있을 경우, 이 학생들의 정보가 자원.

일반적인 REST
좁은 의미로 http 를 통하여 CRUD를 실행하는 API.
http 프로토콜을 이용하기 때문에 URI(route)를 통해 자원을 표시하고,
http 메서드들을 통해 할 일(CRUD)을 처리하도록 설계된 아키텍쳐

RESTfull : 일반적으로 REST라는 아키텍처를 구현하는 웹서비스를 나타내기 위해 사용되는 용어.
REST API를 제공하는 웹 서비스를 RESTful 하다고 할 수 있다.,


RESTful 하지 못한 예
=> CRUD 기능을 모두 POST로만 처리하는 API
=> Route에 resurce, id 와 정보가 들어가는 경우

  2. 모든 사용자에게 접근 권한을 부여할 경우 : AuthorizedUrl의 permitAll()을 이용하여 접근 허가
  
  3. formLogin() 로그인(인증)페이지 설정 
   => loginPage("URL 패턴") : 로그인이 필요한 url로 접근하면 URL패턴 화면으로 이동 
  
  4. logout() : 로그아웃 페이지 설정
   스프링 싀큐리티의 인증 처리 방식은 기본적으로 HttpSession을 이용 

   따라서 브라우저가 종료되면 해당 세션도 자동으로 종료

   만약 브라우저를 종료하지 않고 , 세션을 종료하면 사용자가 로그아웃 요청을 하고 서버는 해당 세션을 강제로 종료 
  invalidateHttpSession(true) : 현재 브라우저와 연관된 세션을 강제 종료

  logoutSuccessUrl("/login") 로그아웃 후 이동할 화면으로 리다이렉트

Comments