导航菜单
首页 >  Srping Security 권한 직접 체크하기시큐리티 태그와 인증  > Spring Security : 계정 생성 + 권한 설정 + 인증/인가 설정

Spring Security : 계정 생성 + 권한 설정 + 인증/인가 설정

이 글은 인프런 정수원님의 강의를 복습하며 작성한 글입니다.

Spring Security  : 계정 생성 + 권한 설정 + 인증/인가 설정

Spring Security는 기본적으로 인증 / 인가를 바탕으로 동작한다. 인증/인가를 위해서 필요한 것은 바로 계정이고, 그 계정에 어떤 권한이 설정되는지가 중요하다. 그리고 어떤 자원으로 접근할 때 인증이 필요한지, 그리고 어떤 권한이 필요한지를 설정하는 것이 Spring Security의 시작이다. 이번 포스팅에서는 계정 생성 + 권한 설정 / 인증 + 인가 설정에 대해 간략히 살펴본다.

 

Spring Security Config 정보 설정@EnableWebSecurity@Configurationpublic class SecurityConfig extends WebSecurityConfigurerAdapter {}

Spring Security Config 정보는 WebSecurityConfigurerAdatper 클래스를 상속받은 클래스를 만들어주고, 필요한 메서드를 오버라이딩 해준다. 그리고 @EnableWebSecurity를 붙여주면 된다. 이 때, 필요하면 @Configuration을 등록해서 필요한 스프링 빈을 등록해주기도 한다. 

 

Spring Security 계정 생성 + 권한 설정@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {String password = passwordEncoder().encode("1111");auth.inMemoryAuthentication().withUser("user").password(password).roles("USER");auth.inMemoryAuthentication().withUser("manager").password(password).roles("MANAGER", "USER");auth.inMemoryAuthentication().withUser("admin").password(password).roles("ADMIN","MANAGER","USER");}

Spring Security 계정 설정은 WebSecurityConfigurerAdatper 클래스의 Configurer(Auth) 메서드를 오버라이딩하면서 설정할 수 있다.  이 때 비밀번호는 반드시 passwordEncoder()를 이용해서 복호화해줘야한다. 

auth.inMemoryAuthentication()메모리 상에 존재하는 계정을 만들 수 있다. 서버를 껏다 키면, 이 계정은 새로 만들어지거나 없어진다withUser() 사용할 계정명을 설정한다.password() 사용할 비밀번호를 설정한다. 이 때 반드시 passwordEncoder를 이용해서 비밀번호를 복호화해야한다. 그렇지 않으면 Exception이 발생한다.roles()계정의 권한을 설정한다. @Beanpublic PasswordEncoder passwordEncoder() {return PasswordEncoderFactories.createDelegatingPasswordEncoder();}

다음은 PasswordEncoder()를 제공해주는 방법이다. PasswordEncoderFactories에서 PasswordEncoder를 만들 수 있다. 그리고 그 결과를 스프링 빈으로 등록해준다. 실제로 현재 상태에서는 딱히 스프링 빈으로 등록할 필요는 없다. @Bean + @Configuration이 없다고 하더라도, 해당 설정 클래스에 메서드가 존재하는 상황이기 때문에 문제 없다. 

 

 

Spring Security 인증/인가 URL 설정  + 인증 방식 설정@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/").permitAll().antMatchers("/mypage").hasRole("USER").antMatchers("/messages").hasRole("MANAGER").antMatchers("/config").hasRole("ADMIN").anyRequest().authenticated();http.formLogin();}

인증 / 인가 정보는 WebSecurityConfigurerAdapter의 configurer(HttpSecurity) 메서드를 오버라이딩하면서 설정할 수 있다. 

authorizeRequests() : URL 인가에 대한 설정을 한다. antMatchers() : 접근할 자원의 URL을 설정한다.permitAll() : 해당 자원은 어떤 권한이 없어도 접근이 가능하다. 익명 사용자도 접근이 가능하다.hasRole() : 특정 권한을 가진 사람만 접근하도록 설정한다.anyRequest().authenticated() : 위의 URL을 제외한 모든 자원 접근은 모두 인증처리가 필요하다. 인증된 사용자만 접근 가능하다.

위의 코드로 설정해주면 USER 권한을 가진 사람은 /mypage로 접근이 가능하고, MANAGER 권한을 가진 사람은 /messages로 접근이 가능하다. ADMIN 권한을 가진 사람은 /config로 접근이 가능하다. 

 

 

테스트코드

https://github.com/chickenchickenlove/spring-security/tree/main/lectureproject/1-1

 

GitHub - chickenchickenlove/spring-security

Contribute to chickenchickenlove/spring-security development by creating an account on GitHub.

github.com

相关推荐: