簡単な2つのステップでshiroの構成と使用を迅速に実現し、ログイン検証、ロール検証、権限検証、shiroログインログアウトプロセスを含む


前言:
shiroはその簡単さ、信頼性、実現の容易さから現在最もよく使われているセキュリティフレームワークとなっているが、この文章ではspringベースのshiroの詳細な構成とログインログアウト機能の使用について簡潔明瞭に述べるほか、慣例に基づいてshiroの概略構成の使用フローを文章の最後にまとめる.この文章は、もともとシロがこんなに簡単だったという錯覚を与えてくれることを願っています.
注意:この文章の最初はspring+mybatisの完全な開発環境に構築されており、shiro以外の構成はほとんど触れません.自分で--eguidのオリジナルの文章をしっかりと行います
shiro補足およびshiro注釈問題解決文章(皆さんに役に立つことを望んでいます):shiroとspringの統合詳細とspringプロジェクトにおけるshiro注釈が有効でない解決方法
一、依存jarパッケージ
この文章はshiro-1.4を使用します.バージョン0
1、shiro公式ダウンロードアドレス:http://shiro.apache.org/download.html
2、maven依存項目:
			
				org.apache.shiro
				shiro-spring
				1.4.0
			

なぜmavenはshiro-springという依存項目だけでよいのか、shiro-springはshiro-coreとshiro-webの2つのパケットに依存するため、shiro-coreとshiro-web、およびこの2つのパケットに依存する項目を自動的に継承します.
二、springに基づく配置方式
1、shiroフィルタの配置

	
		shiroFilter
		org.springframework.web.filter.DelegatingFilterProxy
		
			targetFilterLifecycle
			true
		
	
	
		shiroFilter
		/*
	

2、springに基づくshiro配置
注意事項:springはコンテキストをロードするとき、注釈をスキャンしていません.カスタムrealmではspringの注釈を使用しているので、shiroのカスタムrealmの前に注釈スキャンを行う必要があります.
(1)springでのshiro完全構成

	

	
	
	
		
	
	
	
	
	
	
		
	
	
	
		
		
		
		
		
		
		
		
		
			
			
			
			
				/* = authc
				/static/** =anon
				/login/** = anon
				/admin/** = authc,roles[admin]
				/camera/** = authc
				/** = authc
			
		
	

この構成を変更する必要があるのは
shiroフィルタとshiroセキュリティデータソース(realm).
フィルタには注釈がはっきりと書かれており、anonは匿名アクセスを表し、authcはログイン検証、権限検証、ロール検証が必要であることを示しています.
カスタムrealmインプリメンテーションは以下を参照してください.
(2)カスタムrealmセキュリティデータソース
public class MyRealm extends AuthorizingRealm{
	Logger log=Logger.getLogger(MyRealm.class);
	
	@Autowired
    private UserService userService;//              ,      ,      、          

	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		log.info("            ,     doGetAuthenticationInfo    principals          ,              ");
		UserInfo user = (UserInfo) principals.getPrimaryPrincipal();
		SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
		//       
		Collection roles = userService.findRoles(user);
		log.info("            shiro      ,            ");
		info.addRoles(roles);
		//       
		Collection permissions = userService.findPermissions(user);
		log.info("          shiro      ");
		info.addStringPermissions(permissions);
		return info;
	}

	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token)throws AuthenticationException{
		log.info("shiro    ");
		//                           AuthenticationToken ,      shiro     
		String loginname= token.getPrincipal().toString();
		//             String  ,  shiro              ,            char[] 
		char[] password=(char[]) token.getCredentials();
		//             
		UserInfo user =userService.queryUserInfoByLoginName(loginname);
		log.info("      :"+loginname+","+user+"  :"+password);
		if (user != null&&user.getPassword()!=null) {
			//              shiro   ,shiro           
		    AuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user, password, getName());
		    return authenticationInfo;
		}
		return null;
	}

三、shiroログインとログアウトプロセスの実現
/**
	 * shiro  ,shiro    session  ,       session.invalidate();  
	 */
	@Override
	public void logout(){
		Subject currentUser = SecurityUtils.getSubject();       
	    	currentUser.logout();
	  
	}
	/**
	 * shiro  
	 */
	@Override
	public boolean singin(UserInfo user){
        try{
        	Subject subject = SecurityUtils.getSubject() ;
            	UsernamePasswordToken token = new UsernamePasswordToken(user.getLoginusername(),user.getPassword()) ;
        	subject.login(token);
        	log.info("shiro      ");
        	return true;
        }catch(AuthenticationException e){
        	log.error("shiro       ",e);
        	return false;
        }
	}

	/**
	 *         (shiro  )
	 */
	@Override
	public boolean isSignon() {
		Subject subject = SecurityUtils.getSubject() ;
		return subject.isAuthenticated();
	}
        /**
	 *  shiro            
	 */
	@Override
	public UserInfo getCurrentUserInfo(){
		Subject subject = SecurityUtils.getSubject() ;
		return (UserInfo) subject.getPrincipal();
	}

四、shiro配置使用総括
1、web.xmlでshiroを構成するフィルタ
2.springアプリケーションコンテキスト(例:applicationContext.xml)でshiroフィルタやカスタムrealmなどのその他の補助構成を構成する.
shiroフィルタは、ログイン検証、ロール検証、権限検証が必要なインタフェース、検証が不要なインタフェースを構成できます.カスタムrealmは、shiroベリファイアにユーザー情報、ユーザーロール情報、ユーザー権限情報などのデータソースを提供し、shiroに3つの検証をさせます.
3、shiroは完全なログインプロセスとログアウトプロセスを提供し、既存のログインとログアウトプロセスに対して一定の修正を行うことは避けられない.
以上、皆さんのお役に立てばと思います.--自分をしっかりしろ