요청권한 부여

Jaewoo Back·2024년 7월 13일
0

Spring Security공부

목록 보기
9/13
post-thumbnail

permitAll - 요청에는 권한 부여가 필요하지 않으며 퍼블릭 엔드포인트입니다. 이 경우 인증은 세션에서 검색되지 않습니다

  • denyAll - 어떠한 경우에도 요청이 허용되지 않습니다. 이 경우 세션에서 검색되지 않습니다Authentication

  • hasAuthority - 요청에는 지정된 값과 일치하는 GrantedAuthority가 있어야 합니다.Authentication

  • hasRole - 해당 접두사 또는 기본 접두사로 구성된 모든 항목에 대한 바로 가기hasAuthorityROLE_

  • hasAnyAuthority - 요청에는 지정된 값 중 하나와 일치하는 a가 있어야 합니다.AuthenticationGrantedAuthority

  • hasAnyRole - 해당 접두사 또는 기본 접두사로 구성된 모든 항목에 대한 바로 가기hasAnyAuthorityROLE_

  • access - 요청은 이 사용자 지정을 사용하여 액세스를 결정합니다AuthorizationManager

import static jakarta.servlet.DispatcherType.*;

import static org.springframework.security.authorization.AuthorizationManagers.allOf;
import static org.springframework.security.authorization.AuthorityAuthorizationManager.hasAuthority;
import static org.springframework.security.authorization.AuthorityAuthorizationManager.hasRole;

@Bean
SecurityFilterChain web(HttpSecurity http) throws Exception {
	http
		// ...
		.authorizeHttpRequests(authorize -> authorize                                  (1)
            .dispatcherTypeMatchers(FORWARD, ERROR).permitAll() (2)
			.requestMatchers("/static/**", "/signup", "/about").permitAll()         (3)
			.requestMatchers("/admin/**").hasRole("ADMIN")                             (4)
			.requestMatchers("/db/**").access(allOf(hasAuthority("db"), hasRole("ADMIN")))   (5)
			.anyRequest().denyAll()                                                (6)
		);

	return http.build();
}
  1. 여러 권한 부여 규칙이 지정되어 있습니다. 각 규칙은 선언된 순서대로 고려됩니다.

  2. Spring MVC가 뷰를 렌더링하고 Spring Boot가 오류를 렌더링 할 수 있도록 디스패치하고 허용됩니다.FORWARDERROR

  3. 모든 사용자가 액세스할 수 있는 여러 URL 패턴을 지정했습니다. 특히 URL이 "/static/"으로 시작하거나, "/signup"과 같거나, "/about"인 경우 모든 사용자가 요청에 액세스할 수 있습니다.

  4. "/admin/"으로 시작하는 모든 URL은 "ROLEADMIN" 역할을 가진 사용자로 제한됩니다. 메서드를 호출하기 때문에 "ROLE" 접두사를 지정할 필요가 없다는 것을 알 수 있습니다.hasRole

  5. "/db/"로 시작하는 모든 URL은 사용자에게 "db" 권한과 "ROLEADMIN"가 모두 부여되어야 합니다. 표현식을 사용하고 있으므로 "ROLE" 접두사를 지정할 필요가 없습니다.hasRole

  6. 아직 일치하지 않는 URL은 액세스가 거부됩니다. 이는 실수로 권한 부여 규칙을 업데이트하는 것을 잊지 않으려는 경우에 좋은 전략입니다.

permitAllignoring

정적 리소스가 있는 경우 무시하도록 필터체인을 구성하는 방법
permitAll

http
    .authorizeHttpRequests((authorize) -> authorize
        .requestMatchers("/css/**").permitAll()
        .anyRequest().authenticated()
    )
profile
https://blog.naver.com/jaewoo2_25

0개의 댓글