TIL#41

DuBu·2023년 8월 17일
0

일본IT JAVA 연수과정

목록 보기
59/61
post-thumbnail

Spring Security

Spring Security는 Java 기반의 웹 응용 프로그램 및 서비스에서 보안을 관리하고 제어하기 위한 프레임워크입니다. 이를 사용하여 사용자 인증, 권한 부여, 보안 설정, 인가 등을 처리할 수 있습니다. Spring Security는 Spring Framework의 일부로서, 개발자가 보안 관련 작업을 간편하게 처리할 수 있도록 도와줍니다.

Spring Security의 주요 기능은 다음과 같습니다:

  • 인증(Authentication):
    사용자의 신원을 확인하는 과정으로, 사용자가 자신의 신원을 증명하고 시스템에 로그인할 수 있는지 확인하는 것입니다. Spring Security는 다양한 인증 방법을 지원하며, 사용자 이름과 비밀번호, 토큰 기반 인증, OAuth 등을 활용할 수 있습니다.

  • 인가(Authorization):
    인증된 사용자가 특정 작업 또는 자원에 접근할 수 있는 권한이 있는지를 확인하는 과정입니다. Spring Security는 사용자에 대한 권한과 역할을 관리하며, URL 패턴 또는 메소드 레벨에서 접근 제어를 설정할 수 있습니다.

  • 보안 설정(Security Configuration):
    Spring Security는 XML 또는 Java 설정을 통해 보안 규칙과 사용자 정의 보안 로직을 정의할 수 있습니다. 이를 통해 어플리케이션의 특정 부분이나 리소스에 대한 접근을 제어하고 보호할 수 있습니다.

  • 세션 관리(Session Management):
    사용자 세션의 관리와 관련된 기능을 제공합니다. 세션 고정 공격 방어, 동시 로그인 제어 등의 기능을 지원합니다.

  • Remember-Me 기능:
    사용자가 로그인한 후에도 일정 기간 동안 로그인 상태를 유지하고, 자동으로 로그인하는 기능을 제공합니다.

  • CSRF(Cross-Site Request Forgery) 보호:
    웹 어플리케이션에서 CSRF 공격을 방지하기 위한 보안 기능을 제공합니다.

  • CORS(Cross-Origin Resource Sharing) 지원:
    다른 도메인에서 오는 요청에 대한 제어를 제공하여 웹 어플리케이션의 보안을 강화할 수 있습니다.

Spring Security 사용

==================================================================================
1. dependency만 추가해도 Spring Security에서 제공하는 가장 기본적인 인증이 바로 적용됨

기본 로그인 화면이 가장 먼저 나올 것이다.
Username : user (기본 계정)
Password : 비밀번호는 어플리케이션 기동할때 로그로 나오는 Using generated security password 정보
Using generated security password: 94bd75e2-01f8-4f8d-aabf-e960198d7065

This generated password is for development use only. Your security configuration must be updated before running your application in production.

  1. url을 가로채고 있음.
  2. /login으로 시큐리티가 가지고 html을 뿌리고 있음.

==================================================================================

2.이미지가 보이지 않는 경우.
우선 정적파일들은 시큐리티에 적용되지 않도록 아래와 같이 설정을 한다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

	@Override
	public void configure(WebSecurity web) throws Exception {
		// web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations());
		web.ignoring().antMatchers("/css/**", "/js/**", "/img/**", "/lib/**");
	}
}

이제 더이상 리소스파일들은 스프링 시큐리티에서 관리를 하지 않는다.

  1. 정적 리소스도 url을 가로채고 있음.
  2. 스프링 시큐리티는 세션 기반 로그인을 시키고 있다.

==================================================================================

3.이제 설정에서 유저를 생성한후 , 다시 한번 접속해 보자 , 로그인 창에서 아래의 이름과 비밀번호로 접속해 보자. 그럼 헬로우 월드가 보인다.

   @Override
   protected void configure(AuthenticationManagerBuilder auth) throws Exception {
       auth.inMemoryAuthentication()
               .withUser("member").password("{noop}member").roles("USER").and()
               .withUser("admin").password("{noop}admin").roles("ADMIN");
   }
  1. /logout으로 로그아웃을 할 수 있다.
  2. Test용으로 기본적인 유저 아이디와 패스워드를 지정할 수 있다.

==================================================================================

4.home.jsp를 제대로 만들고, 아래와 같이 설정하여 / 로 접속후 home.jsp 가 나오는것을 확인한다.

   @Override
   protected void configure(HttpSecurity http) throws Exception {
      //우선 CSRF설정을 해제한다.
      //초기 개발시만 해주는게 좋다.
      http.csrf().disable();
      
      http.authorizeRequests()
      .antMatchers("/member/**").hasAnyRole("ROLE_MEMBER") 
      .antMatchers("/admin/**").hasAnyRole("ROLE_ADMIN")
      .antMatchers("/**").permitAll();      
   }

==================================================================================

0개의 댓글