Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

前后端分离下的用户认证和鉴权实践(三) Shiro简介 #4

Open
ZhuXS opened this issue Oct 16, 2017 · 0 comments
Open

Comments

@ZhuXS
Copy link
Owner

ZhuXS commented Oct 16, 2017

Shiro

  • Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证、授权、加密和会话管理等功能,对于任何一个应用程序,Shiro 都可以提供全面的安全管理服务。并且相对于其他安全框架,Shiro 要简单的多,可以与Spring进行无缝集成。
    image

Shiro的几个关键概念

  • Subject:一个安全术语,意指“当前用户”,这里的用户可以指人、第三方进程等其他事物。一旦获得Subject,你就可以立即获得你希望用Shiro为当前用户做的90%的事情,如登录、登出、访问会话、执行授权检查等 -。这里的关键点是Shiro的API非常直观,因为它反映了开发者以‘每个用户’思考安全控制的自然趋势。同时,在代码的任何地方都能很轻松地访问Subject,允许在任何需要的地方进行安全操作。
    Subject subject = SecurityUtils.getSubject();
    subject.login(token);
  • SecurityManager:shiro框架的核心,管理所有用户更的安全操作,引用了多个内部嵌套安全组件(如Session的管理器,Realm等)
    @Bean(name = "securityManager")
     public DefaultWebSecurityManager securityManager(){
         DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
         //设置Realm
         securityManager.setRealm(shiroRealm());
         //设置session管理器
         securityManager.setSessionManager(sessionManager());
         return securityManager;
     }
  • Realm:Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”,也就是说,当与用户帐户这类安全相关数据进行交互,执行认证(登录)和授权(访问控制)时,Shiro会从应用配置的Realm中查找很多内容。
    Realm实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。
    Realm有两个关键方法doGetAuthenticationInfo(AuthenticationToken authenticationToken)执行认证逻辑;doGetAuthorizationInfo(PrincipalCollection principalCollection)执行授权逻辑。
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        //赋予角色和权限
    }
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) 
    throws AuthenticationException {
       //用户认证
    }
  • Filter链:Shiro通过其创新的URL过滤器链功能支持安全特定的过滤规则,它允许你为任何匹配的URL模式指定非正式的过滤器链。
    filterChainDefinitionManager.put("/userInfo","authc");  //需要登录
    filterChainDefinitionManager.put("/jobs/**","perms[JOB:CREATE]");  //需要[JOB:CREATE]权限
    filterChainDefinitionManager.put("/admin/**","roles[Admin]");  //需要Admin角色

相关资料

@ZhuXS ZhuXS changed the title 前后端分离下的用户认证和鉴权实践(三)Shiro简介 前后端分离下的用户认证和鉴权实践(三) Shiro简介 Oct 16, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant