권한 설정

http.antMatchers("{url}").hasRole(“{role}") 와 같이 설정이 가능하다.

http
    .authorizeRequests()
    .antMatchers("/login").permitAll() 	// login 페이지는 인증이 안돼도 접근이 가능해야하기 때문에
    .antMatchers("/user").hasRole("USER")
    .antMatchers("/admin/pay").hasRole("ADMIN")
    .antMatchers("/admin/**").access("hasRole('ADMIN') or hasAnyRole('sys')")  //표현식을 사용해 두개이상의 권한을 설정
    .anyRequest().authenticated();

※ 주의 사항 - 설정 시 구체적인 경로가 먼저 오고 그것 보다 큰 범위의 경로가 뒤에 오도록 해야 한다

 

메소드  동작
 authenticated()  인증된 사용자의 접근을 허용
 fullyAuthenticated()  인증된 사용자의 접근을 허용, rememberMe 인증 제외
 permitAll()  무조건 접근을 허용
 denyAll()  무조건 접근을 허용하지 않음
 anonymous()  익명사용자의 접근을 허용
 rememberMe()  기억하기를 통해 인증된 사용자의 접근을 허용
 access(String)  주어진 SpEL 표현식의 평가 결과가 true이면 접근을 허용
 hasRole(String)  사용자가 주어진 역할이 있다면 접근을 허용 
 hasAuthority(String)   사용자가 주어진 권한이 있다면
 hasAnyRole(String...)  사용자가 주어진 권한이 있다면 접근을 허용
 hasAnyAuthority(String...)  사용자가 주어진 권한 중 어떤 것이라도 있다면 접근을 허용
 hasIpAddress(String)  주어진 IP로부터 요청이 왔다면 접근을 허용

 

 

InMemoryUserDetailsManager 

인메모리로 테스트 유저를 생성할 수 있는데  WebSecurityConfigurerAdapter를 상속받지 않은 상태에서는 아래처럼 이용이 가능하다.

	@Bean
	public InMemoryUserDetailsManager userDetailsService() {
		List<UserDetails> users = new ArrayList<>();
		users.add(User.builder().username("user").password("{noop}1111").roles("USER").build());
		users.add(User.builder().username("sys").password("{noop}11111").roles("SYS").build());
		users.add(User.builder().username("admin").password("{noop}11111").roles("ADMIN", "USER").build());
		return new InMemoryUserDetailsManager(users);
	}
복사했습니다!