Spring Security (5): 권한 설정

23914 단어 기술.
권한 설정
  • Spring Security 유 니 버 설 내장 식
  • 표현 식
    묘사 하 다.
    hasRole([role])
    현재 사용자 가 지정 한 역할 을 가지 고 있다 면 true 로 돌아 갑 니 다. 제 공 된 역할 은 "role" 로 시작 할 수 없습니다. 기본 Spring Security 는 role 을 추가 합 니 다.
    hasAnyRole([role1,role2])
    현재 사용자 가 제공 하 는 역할 (쉼표 로 구 분 된 문자열 목록 형식) 이 있다 면 true 가 제공 하 는 역할 을 되 돌려 줍 니 다. "role" 로 시작 할 수 없습니다. 기본 Spring Security 는 role 을 추가 합 니 다.
    hasAuthority([authority])
    현재 사용자 가 지정 한 권한 이 있다 면 true 로 돌아 갑 니 다.
    hasAnyAuthority([authority1,authority2])
    현재 사용자 가 제공 하 는 모든 권한 (쉼표 로 구 분 된 문자열 목록 형식 으로 제공) 이 있다 면 true 로 돌아 갑 니 다.
    principal
    principal object 에 직접 접근 할 수 있 습 니 다. current user 를 사용 하지 않 습 니 다.
    authentication
    Security Context 에서 가 져 온 현재 인증 대상 에 직접 접근 할 수 있 도록 합 니 다.
    permitAll
    모든 사용자 가 접근 할 수 있 습 니 다.
    denyAll
    어떤 사용자 도 접근 할 수 없습니다.
    isAnonymous()
    현재 사용자 가 익명 사용자 라면 true 로 돌아 갑 니 다.
    isRememberMe()
    현재 사용자 가 remember me 사용자 라면 true 로 돌아 갑 니 다.
    isAuthenticated()
    사용자 가 익명 이 아니라면 true 로 돌아 갑 니 다.
    isFullyAuthenticated()
    사용자 가 익명 사용자 나 '나 를 기억 해' 사용자 가 아니라면 true 로 돌아 갑 니 다.
    hasPermission(Object target, Object permission)
    사용자 가 주어진 권한 의 대상 에 접근 할 권리 가 있다 면 true 로 돌아 갑 니 다.예 를 들 어 hasPermission (domainObject, 'read')
    hasPermission(Object targetId, String targetType, Object permission)
    사용자 가 주어진 권한 의 대상 에 접근 할 권리 가 있다 면 true 로 돌아 갑 니 다.예 를 들 어 hasPermission (1, 'com. example. domain. Message', 'read')
    배치 안 열
    //         
    http.authorizeRequests().antMatchers("/index").permitAll();
    http.authorizeRequests().antMatchers("/index").access("permitAll");]
    
    //         
    http.authorizeRequests().antMatchers("/home").denyAll();
    http.authorizeRequests().antMatchers("/home").access("denyAll");
    
    //        (      )
    http.authorizeRequests().antMatchers("/admin").authenticated();
    http.authorizeRequests().antMatchers("/admin").access("authenticated");
    
    //        (      ,   )
    http.authorizeRequests().antMatchers("/admin").fullyAuthenticated();
    http.authorizeRequests().antMatchers("/admin").access("fullyAuthenticated");
    		
    //          
    http.authorizeRequests().antMatchers("/admin").rememberMe();
    http.authorizeRequests().antMatchers("/admin").access("rememberMe");
    
    //        
    http.authorizeRequests().antMatchers("/admin").anonymous();
    http.authorizeRequests().antMatchers("/admin").access("anonymous");
    
    //     
    http.authorizeRequests().antMatchers("/index").hasAuthority("user");
    http.authorizeRequests().antMatchers("/index").access("hasAuthority('user')");
    
    //         
    http.authorizeRequests().antMatchers("/home").hasAnyAuthority("update", "delete", "insert");
    http.authorizeRequests().antMatchers("/home").access("hasAnyAuthority('update','delete','insert')");
    
    //spring security  role             ,       ,   ROLE_  
    //role  ROLE_     
    //  :hasRole、hasAnyRole   role    ROLE_  ,      
    //  :   access    hasRole、hasAnyRole ROLE_    ,   
    http.authorizeRequests().antMatchers("/index").hasRole("GUEST");
    http.authorizeRequests().antMatchers("/index").access("hasRole('GUEST')");
    http.authorizeRequests().antMatchers("/admin").hasAuthority("ROLE_GUEST");
    http.authorizeRequests().antMatchers("/home").hasAnyRole("GUEST", "USER", "ADMIN");
    http.authorizeRequests().antMatchers("/home").access("hasAnyRole('ROLE_GUEST','ROLE_USER','ROLE_ADMIN')");
    
    
    

    SpEL 표현 식
  • Authority Check 클래스
  • @Component("check")
    public class AuthorityCheck {
    
    	public boolean permitAll(){
    		return true;
    	}
    	public boolean denyAll(){
    		return false;
    	}
    	public boolean req(HttpServletRequest req){
    		return "1".equals(req.getParameter("type"));
    	}
    	public boolean auth(Authentication authentication){
    		return authentication.getAuthorities().size() > 2;
    	}
    	public boolean check(HttpServletRequest req, Authentication authentication){
    		return "1".equals(req.getParameter("type")) || authentication.getAuthorities().size() > 2;
    	}
    }
    
  • SpEL 사용
  • //  SpEL   
    http.authorizeRequests().antMatchers("/index").access("@check.permitAll()");
    http.authorizeRequests().antMatchers("/home").access("@check.denyAll()");
    http.authorizeRequests().antMatchers("/index").access("@check.req(request)");
    http.authorizeRequests().antMatchers("/index").access("@check.auth(authentication)");
    http.authorizeRequests().antMatchers("/index").access("@check.check(request,authentication)");
    

    좋은 웹페이지 즐겨찾기