shiro 권한 부여

4807 단어 shirorbac
1 shiro 권한 부여
shiro 권한 부여, 소 시리즈 공유, 소 칼럼 공유, 소 공유.shiro 권한 수여 원리, shiro 권한 수여 분석.
shiro 권한 부여
1.1 권한 부여 절차
 
1.2 권한 부여 방식
Shiro 는 세 가지 방식 의 인증 을 지원 합 니 다.
 프로 그래 밍: if / else 인증 코드 블록 을 작성 하여 완성:
Subject subject = SecurityUtils.getSubject();
if(subject.hasRole(“admin”)) {
/ / 권한 이 있다
} else {
/ / 권한 없 음
}
주해 식: 실행 중인 자바 방법 에 해당 하 는 주 해 를 설치 하여 완성 합 니 다.
@RequiresRoles("admin")
public void hello() {
/ / 권한 이 있다
}
JSP / GSP 탭: JSP / GSP 페이지 에서 해당 탭 을 통 해 완성:



본 교육 프로그램 은 첫 번 째 프로 그래 밍 방식 을 사용 하고 실제 와 웹 시스템 을 통합 하여 사용 한 후 두 가지 방식 을 사용 하도록 권한 을 부여 합 니 다.
1.3 인증 테스트
1.3.1 shiro-permission.ini
저장 권한 이 있 는 프로필 shiro - permission. ini 를 만 듭 니 다. 다음 과 같 습 니 다.
[users]
#  zhang    123,     role1 role2    
zhang=123,role1,role2
wang=123,role2

[roles]
#  role1   user  create、update  
role1=user:create,user:update
#  role2   user  create、delete  
role2=user:create,user:delete
#  role3   user  create  
role3=user:create

ini 파일 에서 사용자, 캐릭터, 권한 의 설정 규칙 은 "사용자 이름 = 비밀번호, 캐릭터 1, 캐릭터 2..." "캐릭터 = 권한 1, 권한 2..." 입 니 다. 먼저 사용자 이름 에 따라 캐릭터 를 찾 은 다음 에 캐릭터 에 따라 권한 을 찾 습 니 다. 캐릭터 는 권한 집합 입 니 다.
1.3.2 권한 문자열 규칙
권한 문자열 의 규칙 은 "자원 식별 자: 작업: 자원 인 스 턴 스 식별 자" 입 니 다. 어떤 자원 의 인 스 턴 스 에 대해 어떤 조작 을 하 는 지 뜻 합 니 다. ":" 자원 / 작업 / 인 스 턴 스 의 분할 문자 입 니 다. 권한 문자열 도 * 마스크 를 사용 할 수 있 습 니 다.
예:
사용자 생 성 권한: user: create 또는 user: create: *
사용자 가 실례 001 을 수정 할 수 있 는 권한: user: update: 001
사용자 인 스 턴 스 001 의 모든 권한: user: *: 001
1.3.3 테스트 코드
 
테스트 코드 는 인증 코드 와 같 습 니 다. ini 주 소 는 shiro - permission. ini 로 바 뀌 었 습 니 다. 주로 아래 에서 권한 을 부여 하 는 방법 을 배 웁 니 다. 주의: 사용자 인증 이 통과 한 후에 아래 의 권한 수여 코드 를 실행 합 니 다.
@Test
	public void testPermission() {

		//  ini     SecurityManager  
		Factory<SecurityManager> factory = new IniSecurityManagerFactory(
				"classpath:shiro-permission.ini");

		//   SecurityManager
		SecurityManager securityManager = factory.getInstance();

		//  securityManager       
		SecurityUtils.setSecurityManager(securityManager);

		//       
		Subject subject = SecurityUtils.getSubject();

		//          
		//     
		//          (principals)   (credentials)
		UsernamePasswordToken token = new UsernamePasswordToken("zhang", "123");
		try {
			subject.login(token);
		} catch (AuthenticationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		//       
		Boolean isAuthenticated = subject.isAuthenticated();

		System.out.println("      :" + isAuthenticated);

		//              
		//         
		System.out.println("          :" + subject.hasRole("role1"));
		//        
		System.out.println("          :" + subject.hasAllRoles(Arrays.asList("role1", "role2")));
		
//		subject.checkRole("role1");
//		subject.checkRoles(Arrays.asList("role1", "role2"));

		//     ,       
		// subject.checkRole("role22");

		//       
		System.out.println("         :" + subject.isPermitted("user:delete"));
		System.out.println("        :" + subject.isPermittedAll("user:create:1",	"user:delete"));
		
		//    
		subject.checkPermission("sys:user:delete");
		subject.checkPermissions("user:create:1","user:delete");
		

	}

1.3.4 역할 기반 권한 부여
//              
		//         
		System.out.println("          :" + subject.hasRole("role1"));
		//        
		System.out.println("          :" + subject.hasAllRoles(Arrays.asList("role1", "role2")));

 
대응 하 는 check 방법:
subject.checkRole("role1");
subject.checkRoles(Arrays.asList("role1", "role2"));

위의 check 방법 은 권한 수여 에 실패 하면 이상 을 던 집 니 다:
org.apache.shiro.authz.UnauthorizedException: Subject does not have role [.....]
1.3.5 자원 기반 권한 부여
//       
		System.out.println("         :" + subject.isPermitted("user:delete"));
		System.out.println("        :" + subject.isPermittedAll("user:create:1",	"user:delete"));

대응 하 는 check 방법:
subject.checkPermission("sys:user:delete");
subject.checkPermissions("user:create:1","user:delete");

위의 check 방법 은 권한 수여 에 실패 하면 이상 을 던 집 니 다:
org.apache.shiro.authz.UnauthorizedException: Subject does not have permission [....]
 소 오리지널 공유http://blog.csdn.net/qq_30739519) 자바 구조 사 교류 군 523988350

좋은 웹페이지 즐겨찾기