Apache Shiro 10 분 여행!

7575 단어
다음은 Shiro 에 대한 간단 한 학습 과 이해 입 니 다. 더 깊이 공부 하려 면 제 칼럼 을 참고 하 세 요.
http://blog.csdn.net/column/details/study-shiro.html?&page=1
 
머리말
Apache Shiro 10 분 여행 에 오신 것 을 환영 합 니 다!
이 간단 하고 빠 른 예 시 를 통 해 응용 프로그램 에서 Shiro 를 사용 하 는 것 에 대해 깊이 이해 할 수 있 기 를 바 랍 니 다.응, 10 분 이면 해결 할 수 있 을 거 야.
개술
Apache Shiro 가 뭐 예요?
Apache Shiro 는 간단 한 자바 보안 프레임 워 크 를 사용 하여 개발 자 에 게 직관 적 이 고 전면적 인 인증, 권한 수여, 암호 화 및 세 션 관리 솔 루 션 을 제공 합 니 다.
실제로 Shiro 의 주요 기능 은 응용 프로그램 에서 보안 과 관련 된 모든 것 을 관리 하 는 동시에 가능 한 한 다양한 실현 방법 을 지원 하 는 것 이다.Shiro 는 완벽 한 인터페이스 구동 디자인 과 대상 지향 원칙 위 에 세 워 져 다양한 사용자 정의 행 위 를 지원 합 니 다.Shiro 가 제공 하 는 기본 적 인 실현 은 다른 안전 프레임 워 크 와 같은 기능 을 완성 할 수 있 도록 하 는 것 도 우리 가 원 하 는 것 이 아 닙 니까?
그럼 Apache Shiro 는 뭘 할 수 있 을까요?
많이, 많이, 헤헤.하지만 빠 른 안내 에 소 개 를 하지 않 습 니 다. 알 고 싶 으 면 어떻게 하 시 겠 습 니까?여기 가서 답 을 찾 아 봐.물론 우리 가 언제, 그리고 왜 시 로 를 만 들 었 는 지 알 고 싶다 면 슈 리 오의 역사 와 사명 을 살 펴 보 자.
OK, 이제 우리 뭘 좀 합 시다.
주: Shiro 는 모든 환경 에서 실 행 될 수 있 습 니 다. 가장 간단 한 명령 행 응용, 대형 기업 응용 과 클 러 스 터 응용 까지 작 습 니 다.하지만 빠 른 매 뉴 얼 에서 가장 간단 한 main 방법 을 사용 하여 Shiro 의 API 에 대해 감각 적 인 인식 을 가지 게 하려 고 합 니 다.
다운로드 하 다.
  • JDK 1.5 + 와 Maven 2.2 +
  • 가 설치 되 어 있 는 지 확인
  • 최신 발 표 된 소스 코드 를 다운로드 하 러 갑 니 다.예 에서 우 리 는 1.1.0 버 전 을 사용한다.
  • 압축 해제 소스 코드

  • 빠 른 안내 폴 더 로 들 어가 기
    cd shiro-root-1.1.0/samples/quickstart

  • 빠 른 가이드 실행
    mvn compile exec:java

  • 이 과정 에서 로그 정 보 를 출력 하여 진행 중인 것 이 무엇 인지 알려 주 고 마지막 으로 실행 을 종료 합 니 다.여기 서 'samples / quickstart / src / main / java / Quickstart. java' 에서 원본 코드 를 찾 을 수도 있 고 수정 할 수도 있 습 니 다. 수정 후 'mvn copile exec: java' 를 실행 하면 됩 니 다.
    Quickstart.java
    Quickstart. java 에는 방금 우리 가 언급 한 모든 내용 (인증, 권한 수여 등) 이 포함 되 어 있 습 니 다. 이 간단 한 예 시 를 통 해 Shiro 의 API 를 쉽게 익 힐 수 있 습 니 다.그러면 Quickstart. 자바 의 코드 를 조금씩 분석 하면 그들의 역할 을 이해 할 수 있 습 니 다.거의 모든 환경 에서 이러한 방식 으로 현재 사용 자 를 얻 을 수 있 습 니 다.
    Subject currentUser = SecurityUtils.getSubject();
    Security Utils. getSubject () 를 통 해 현재 Subject 를 얻 을 수 있 습 니 다.Subject 는 애플 리 케 이 션 에서 사용자 의 특정한 안전 한 축소판 으로 User 를 직접 사용 하 는 것 이 더 적절 하 다 고 느끼 지만 실제 적 으로 그 의 미 는 User 를 훨씬 능가한다.그리고 모든 응용 프로그램 은 자신의 사용자 와 프레임 워 크 가 있 기 때문에 우 리 는 그들 과 혼동 하고 싶 지 않다. 게다가 Subject 는 안전 분야 에서 공 인 된 명사 이다.OK, 계속 합 시다.
    단일 응용 시스템 에서 getSubject () 를 호출 하면 Subject 를 되 돌려 줍 니 다. 이것 은 응용 프로그램의 특정한 위치 에 있 는 사용자 정보 입 니 다.서버 에서 실 행 된 경우 (예 를 들 어 웹 응용) getSubject 는 현재 스 레 드 나 요청 에 있 는 사용자 정 보 를 되 돌려 줍 니 다.지금 당신 은 이미 Subject 대상 을 얻 었 습 니 다. 그러면 그것 으로 무엇 을 할 수 있 습 니까?
    현재 세 션 사용자 의 다른 인 자 를 얻 으 려 면 세 션 대상 을 가 져 올 수 있 습 니 다:
    Session session = currentUser.getSession();
    session.setAttribute( "someKey", "aValue" );
    이 Session 대상 은 Shiro 에 있 는 특유 의 대상 으로 우리 가 자주 사용 하 는 HttpSession 과 매우 비슷 하지만 추가 적 인 것 을 제공 합 니 다. 그 중에서 HttpSession 과 가장 큰 차이 점 은 Shiro 에 있 는 Session 이 HTTP 환경 에 의존 하지 않 는 다 는 것 입 니 다.
    웹 프로그램 에 Shiro 를 배치 하면 이 세 션 은 HttpSession 기반 입 니 다.그러나 QuickStart 예제 처럼 비 웹 환경 에서 사용 되 며, Shiro 는 기본적으로 EnterpriseSession Managment 를 사용 합 니 다.즉, 애플 리 케 이 션 의 어느 층 에서 든 같은 API 를 사용 하 더 라 도 배치 환경 을 고려 할 필요 가 없다 는 장점 은 애플 리 케 이 션 이 새로운 세 계 를 여 는 것 이다. 애플 리 케 이 션 에서 Session 대상 을 가 져 오 려 면 더 이상 HttpSession 이나 EJB 의 세 션 Bean 에 의존 하지 않 아 도 되 기 때문이다.그리고 모든 클 라 이언 트 기술 은 session 데 이 터 를 공유 할 수 있 습 니 다.
    현재 Subject 와 Session 대상 을 얻 을 수 있 습 니 다.그렇다면 우 리 는 캐릭터 와 권한 같은 것들 을 어떻게 검증 합 니까?
    간단 합 니 다. 이미 받 은 user 대상 을 통 해 검증 할 수 있 습 니 다.Subject 대상 은 현재 사용 자 를 대표 합 니 다. 하지만 누가 현재 사용자 입 니까?익명 의 사용자 들 인 데.로그 인해 야 현재 사용 자 를 얻 을 수 있다 는 것 이다.문제 없어, 이렇게 하면 해결 할 수 있어.
    if ( !currentUser.isAuthenticated() ) { 
    
    //collect user principals and credentials in a gui specific manner 
    
    //such as username/password html form, X509 certificate, OpenID, etc. 
    
    //We'll use the username/password example here since it is the most common. 
    
    //(do you know what movie this is from? ;) 
    
    UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa"); 
    
    //this is all you have to do to support 'remember me' (no config - built in!): 
    
    token.setRememberMe(true); 
    
    currentUser.login(token); 
    
    }
    

    바로 이 겁 니 다. 너무 간단 하 죠?
    그럼 로그 인 에 실 패 했 습 니 다. 어떻게 처리 하나 요?각종 이상 을 포획 하여 서로 다른 유형의 이상 에 따라 서로 다른 처 리 를 할 수 있다.
    try { 
    
    currentUser.login( token ); 
    
    //if no exception, that's it, we're done! 
    
    } catch ( UnknownAccountException uae ) { 
    
    //username wasn't in the system, show them an error message? 
    
    } catch ( IncorrectCredentialsException ice ) { 
    
    //password didn't match, try again? 
    
    } catch ( LockedAccountException lae ) { 
    
    //account for that username is locked - can't login. Show them a message? 
    
    } 
    
    ... more types exceptions to check if you want ... 
    
    } catch ( AuthenticationException ae ) { 
    
    //unexpected condition - error? 
    
    } 
    

    Shiro 가 제공 하 는 여러 가지 이상 을 포착 할 수 있 고 사용자 정의 클래스 이상 을 던 져 Shiro 가 고려 하지 않 은 상황 을 처리 할 수 있 습 니 다.자세 한 정 보 를 알 고 Authentication Exception Javadoc 를 알 수 있 습 니 다.
    알림: 가장 안전 한 방법 은 로그 인 실패 소식 을 사용자 에 게 알 리 는 것 입 니 다. 공격 자가 시스템 에 침입 하 는 것 을 도와 주지 않 겠 죠?
    OK, 지금 은 로그 인 사용 자 를 가지 고 있 습 니 다. 우 리 는 무엇 을 할 수 있 습 니까?
    예 를 들 어 그들 은 누구 입 니까?
    //print their identifying principal (in this case, a username): 
    
    log.info( "User [" + currentUser.getPrincipal() + "] logged in successfully." ); 
     
     
    
    if ( currentUser.hasRole( "schwartz" ) ) { 
    
    log.info("May the Schwartz be with you!" ); 
    
    } else { 
    
    log.info( "Hello, mere mortal." ); 
    
    } 
    

    또한 사용자 가 특정한 실체 에 대해 조작 권한 이 있 는 지 판단 할 수 있다.
    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( "winnebago:drive:eagle5" ) ) { 
    
    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!"); 
    
    } 
    

    식 은 죽 먹 기 죠?
    마지막 으로 사용자 가 사용 을 마치 면 응용 프로그램 을 종료 할 수 있 습 니 다.
    currentUser.logout(); //removes all identifying information and invalidates their session too.
    이것 이 바로 Apache Shiro 개발 애플 리 케 이 션 의 핵심 입 니 다. 물론 Apache Shiro 는 복잡 한 것 을 내부 에 많이 포 장 했 지만 지금 은 이렇게 간단 합 니 다.
    사용자 가 로그 인 할 때 누가 사용자 정보 (사용자 이름, 비밀번호, 역할, 권한 등) 를 꺼 내 고 실행 할 때 누가 안전 인증 을 책임 집 니까?니 가 결정 해 야 지.Shiro 에 실 현 된 Realm 의 Reaml 을 Shiro 에 설정 하면 됩 니 다.
    어떻게 설정 하 는 지 는 어느 정도 에 운영 환경 에 달 려 있 습 니 다. 예 를 들 어 단일 응용, 웹 응용, Spring 또는 JEE 용기 기반 응용 또는 조합 모드 에서 Shiro 를 사용 하 는 지 설정 이 다 릅 니 다.QuickStart 예제 의 범 위 를 초과 하 는 방법 을 설정 하 는 것 은 Shiro 의 API 와 개념 을 숙지 하 는 데 도움 을 주 는 것 입 니 다.
    Shiro 에 대해 더 알 고 싶다 면 Authentication Guide 와 Authorization Guide 를 살 펴 볼 수 있다.다른 문서 (특히 Reference Manual) 도 볼 수 있 습 니 다. 여러 가지 의문 을 해결 할 수 있 습 니 다.
     
     
    이상 은 Shiro 에 대한 간단 한 학습 과 이해 입 니 다. 더 깊이 공부 하고 싶 으 시 면 제 칼럼 을 참고 하 세 요.
    http://blog.csdn.net/column/details/study-shiro.html?&page=1
     
    본문 참고:http://www.cnblogs.com/ibook360/archive/2011/10/27/2226522.html

    좋은 웹페이지 즐겨찾기