Apache Shiro 사용자 매뉴얼 (4) Realm 구현
은 인증과 승인의 내부 구현 메커니즘에 언급되어 있으며, 최종 처리는 Real로 넘겨져 처리됩니다. 왜냐하면 Shiro에서는 애플리케이션의 사용자, 역할, 권한 정보가 궁극적으로 Realm을 통해 얻어지기 때문입니다. 일반적으로 Shiro가 필요로 하는 확인 정보는 Realm의 데이터 소스에서 직접 가져옵니다. Realm은 보안 프레임워크 전용 DAO라고 할 수 있습니다.
1. 인증 구현
위에서 언급했듯이 Shiro의 인증 프로세스는 결국 Realm에 넘겨져 실행됩니다. 이제 Realm의 getAuthenticationInfo(token) 메소드가 호출됩니다.
이 방법은 주로 다음 작업을 수행합니다.
1. 인증을 위해 제출된 토큰 정보를 확인합니다.
2. 토큰 정보에 대해
에서 사용자 정보를 얻습니다. 3. 사용자 정보를 일치시키고 확인합니다.
4. 확인이 통과되면 사용자 정보를 캡슐화하는 AuthenticationInfo 인스턴스가 반환됩니다.
5. 확인에 실패하면 AuthenticationException 예외 메시지가 발생합니다.
우리 애플리케이션에서 해야 할 일은 Realm 클래스를 사용자 정의하고, AuthorizingRealm 추상 클래스를 상속하고, doGetAuthenticationInfo()를 오버로드하고, 사용자 정보를 얻는 방법을 다시 작성하는 것입니다.
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException { UsernamePasswordToken token = (UsernamePasswordToken) authcToken; User user = accountManager.findUserByUserName(token.getUsername()); if (user != null) { return new SimpleAuthenticationInfo(user.getUserName(), user.getPassword(), getName()); } else { return null; } }
2. 인증 구현
인증 구현은 사용자 정의 Realm에서 doGetAuthorizationInfo() 메서드를 오버로드하고 사용자 권한을 얻는 방법을 다시 작성할 수 있습니다.
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { String userName = (String) principals.fromRealm(getName()).iterator().next(); User user = accountManager.findUserByUserName(userName); if (user != null) { SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); for (Group group : user.getGroupList()) { info.addStringPermissions(group.getPermissionList()); } return info; } else { return null; } }
위 내용은 Apache Shiro 사용자 매뉴얼(4)의 Realm 구현 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!