Shiro 프로필 과 Quickstart
7670 단어 권한 관리
Apache Shiro 는 강력 하고 사용 하기 쉬 운 자바 보안 프레임 워 크 로 인증,권한 수여,암호 화,세 션 관리,웹 통합,캐 시 등 을 수행 합 니 다.스프링 시 큐 리 티 에 비해 스프링 시 큐 리 티 가 하 는 기능 이 강하 지 않 을 수도 있 습 니 다.Shiro 는 자바 SE 환경 뿐만 아니 라 자바 EE 환경 에 도 사용 할 수 있 는 충분 한 응용 프로그램 을 쉽게 개발 할 수 있다.
기능 점:
Authentication: / , ;
Authorization: , , ; , : 。 ;
Session Management: , , , ; JavaSE , Web ;
Cryptography: , , , ;
Web Support:Web , Web ;
Caching: , , 、 / , ;
Concurrency:shiro , , ;
Testing: ;
Run As: ( ) ;
Remember Me: , , , 。
Shiro 3 대 핵심 구성 요소
Subject:즉"현재 작업 사용자"입 니 다.그러나 Shiro 에서 Subject 라 는 개념 은 사람 을 가리 키 는 것 이 아니 라 제3자 프로 세 스,백 스테이지 계 정(Daemon Account)또는 다른 유사 한 것 일 수도 있다.그것 은 단지'현재 소프트웨어 와 상호작용 하 는 것'을 의미 할 뿐이다.Subject 는 현재 사용자 의 안전 조작 을 대표 하고 모든 Subject 는 Security Manager 에 연결 되 며 Security Manager 는 모든 사용자 의 안전 조작 을 관리 합 니 다.Security Manager:보안 관리 자 는 Shiro 프레임 워 크 의 핵심 입 니 다.Shiro 는 Security Manager 를 통 해 내부 구성 요소 인 스 턴 스 를 관리 하고 이 를 통 해 안전 관리의 각종 서 비 스 를 제공 합 니 다.Realm:Realm 은 Shiro 와 응용 안전 데이터 간 의'교량'또는'연결기'역할 을 합 니 다.사용자 에 대한 인증(로그 인)과 권한 수여(액세스 제어)검증 이 실 행 될 때 Shiro 는 설 정 된 Realm 에서 사용자 와 권한 정 보 를 찾 는 것 이다.그런 의미 에서 Realm 은 실질 적 으로 안전 과 관련 된 DAO 입 니 다.데이터 원본 의 연결 디 테 일 을 봉인 하고 필요 할 때 관련 데 이 터 를 Shiro 에 제공 합 니 다.Shiro 를 설정 할 때 인증 과(또는)인증 에 사용 할 Realm 을 최소한 지정 해 야 합 니 다.여러 개의 Realm 을 설정 하 는 것 은 가능 하지만,적어도 하나 가 필요 합 니 다.
인증
shiro 에서 사용 자 는 principals(신분)와 credentials(증명)를 shiro 에 제공 하여 사용자 의 신분 을 검증 할 수 있 습 니 다.
•
인증
:일반적으로 신분 ID 등 일부 표지 정 보 를 제공 하여 로그 인 자의 신분 을 나타 내야 합 니 다.예 를 들 어 email 을 제공 하 는 경우,
사용자 이름/비밀번호
증명 하 러 왔 습 니 다.
shiro 에서 사용 자 는 제공 해 야 합 니 다.
principals(신분)와 credentials(증)
번 하 다
shiro 에 사용자 인증 을 적용 합 니 다.
•
principals
신분
주체 의 표식 속성
,모든 속성 일 수 있 습 니 다.
사용자 이름
메 일 박스 등 유일 하면 됩 니 다.
。하나의 주 체 는 여러 개의 principals 가 있 을 수 있 지만,
단 하나
Primary principals
보통 사용자 이름/메 일/핸드폰 번호 입 니 다.
•
credentials
:
증명
암호/디지털 인증서 등 주체 만 아 는 보안 값 입 니 다.
•
가장 흔 한 principals 와 credentials 의 조합 은
사용자 이름/비밀번호
자,외 두 가지 관련 개념 은 전에 언급 한 것 이다.
Subject 미치다
Realm,각각 주체 및 검증 주체 의 데이터 원본
권한 을 부여 하 다
권한 을 부여 하 다
부르다
접근 제어,즉 응용 프로그램 에서 누가 어떤 자원 에 접근 하 는 지 제어 하 는 것 입 니 다.
(예 를 들 어 페이지 방문/데이터 편집/페이지 작업 등).권한 수여 에서 알 아야 할 몇 가지 관건 적 인 대상:주체(Subject),자원(Resource),권한(Permission),역할(Role).
1、
주체(제목):
응용 프로그램 에 접근 한 사용자,Shiro 에서 사용
Subject
이 사용 자 를 대표 합 니 다.사용 자 는 권한 을 수 여 받 은 후에 만 해당 하 는 자원 에 접근 할 수 있 습 니 다.
2.자원(자원):
응용 프로그램 에서 사용자 가 접근 할 수 있 는 URL
,예 를 들 어 JSP 페이지 방문,일부 데이터 보기/편집,특정한 업무 방법 방문,텍스트 인쇄 등 은 모두 자원 입 니 다.사용 자 는 권한 을 부여 해야만 접근 할 수 있다.
3.권한(Permission):
안전 정책 중의 원자 권한 수여 단 위 는 권한 을 통 해 우 리 는 응용 에서 사용자 가 특정한 자원 을 조작 할 권리 가 있 는 지 를 나 타 낼 수 있다.즉시
권한 은 응용 프로그램 에서 사용자 가 특정한 자원 에 접근 할 수 있 는 지 를 표시 합 니 다.
예 를 들 어 사용자 목록 페이지 를 방문 하여 사용자 데 이 터 를 조회/추가/수정/삭제(즉,CRUD(추가 검사 및 삭제)식 권한 제어)하 는 경우 가 많 습 니 다.권한 은 사용자 가 특정한 자원 을 조작 할 권리 가 있 는 지,즉 특정한 자원 에 반 영 된 조작 이 허용 되 지 않 는 지 를 나타 낸다.
4.캐릭터(역할)
:
권한 집합
일반적으로 사용자 에 게 권한 이 아 닌 역할 을 부여 합 니 다.즉,사용자 가 한 그룹의 권한 을 가 질 수 있 고 권한 을 부여 할 때 편리 합 니 다.전형 적 인 예 를 들 어 프로젝트 매니저,기술 총감독,CTO,개발 엔지니어 등 은 모두 역할 이 고 서로 다른 역할 은 서로 다른 권한 을 가진다.
Quickstart
shrio.ini
[users]# = ,
root = secret, admin
guest = guest, guest
presidentskroob = 12345, president
darkhelmet = ludicrousspeed, darklord, schwartz
lonestarr = vespa, goodguy, schwartz
[roles]# = ( )
admin = *
schwartz = lightsaber:*
goodguy = user:delete:zhangsan
public class Quickstart {
private static final transient Logger log = LoggerFactory.getLogger(Quickstart.class);
public static void main(String[] args) {
// shrio securityManager
Factory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
// subject
Subject currentUser = SecurityUtils.getSubject();
// session
Session session = currentUser.getSession();
session.setAttribute("someKey", "aValue");
String value = (String) session.getAttribute("someKey");
if (value.equals("aValue")) {
log.info("---> Retrieved the correct value! [" + value + "]");
}
// ,
if (!currentUser.isAuthenticated()) {
// UsernamePasswordToken
UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");
// rememberme: ,authc
token.setRememberMe(true);
try {
// realm token realm protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException{}
currentUser.login(token);
}
//
catch (UnknownAccountException uae) {
log.info("----> There is no user with username of " + token.getPrincipal());
return;
}
//
catch (IncorrectCredentialsException ice) {
log.info("----> Password for account " + token.getPrincipal() + " was incorrect!");
return;
}
//
catch (LockedAccountException lae) {
log.info("The account for username " + token.getPrincipal() + " is locked. " +
"Please contact your administrator to unlock it.");
}
//
catch (AuthenticationException ae) {
//unexpected condition? error?
}
}
log.info("----> User [" + currentUser.getPrincipal() + "] logged in successfully.");
// schwartz
if (currentUser.hasRole("schwartz")) {
log.info("----> May the Schwartz be with you!");
} else {
log.info("----> Hello, mere mortal.");
return;
}
// lightsaber:weild ( )
if (currentUser.isPermitted("lightsaber:weild")) {
log.info("----> You may use a lightsaber ring. Use it wisely.");
} else {
log.info("Sorry, lightsaber rings are for schwartz masters only.");
}
//
if (currentUser.isPermitted("user:delete:zhangsan")) {
log.info("----> You are permitted to 'drive' the winnebago with license plate (id) 'eagle5'. " +
"Here are the keys - have fun!");
} else {
log.info("Sorry, you aren't allowed to drive the 'eagle5' winnebago!");
}
//
System.out.println("---->" + currentUser.isAuthenticated());
currentUser.logout();
System.out.println("---->" + currentUser.isAuthenticated());
System.exit(0);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
google 서비스 권한 관리 모범 사례 analytics, google drive 등 포함나의 칸가에타사이쿄의 권한 관리 특히 google 주위에 관해서입니다. 권한 관리 방법은 거의 변경할 수 없으므로 모범 사례를 처음부터 도입해야 한다고 강하게 느낍니다. 1 브랜드 계정 2 google groups ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.