shiro框架的基本理解

1.简介

shiro是一个安全框架,可以进行认证、授权、密码加密、会话管理

从外部来解析shiro框架:

shiro框架的基本理解_第1张图片

Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等;即一个抽象概念;所有Subject都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是一个门面;SecurityManager才是实际的执行者;

SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且它管理着所有Subject;可以看出它是Shiro的核心,它负责与后边介绍的其他组件进行交互,如果学习过SpringMVC,你可以把它看成DispatcherServlet前端控制器;

Realm:域,Shiro从从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。


1.1功能:

Authentication身份认证/登录,验证用户是不是拥有相应的身份;

Authorization授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;

Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;

Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;

Web Support:Web支持,可以非常容易的集成到Web环境;

Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;

Concurrency:shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;

Testing:提供测试支持;

Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;

Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了

2.如何搭建shiro

2. 1web. xml 配置

  使得shiro配置能够生效

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


2.2 spring-shiro.xml

注意配置信息的","分隔都是以并且的关系


 
    
      
          
          
      
  
      
      
          
      
      
      
         
           
          
          
          
              
            	 /index.jsp= anon /login.jsp= anon /login.do = anon /view/text/text.jsp=authc,perms["p5","p4"],roles["admin"] /view/** = authc        3 简单使用 
  

3.1 如何调用

    UsernamePasswordToken token =new UsernamePasswordToken(name,password);
    Subject subject=SecurityUtils.getSubject();
    System.out.println(name);
    try {
        subject.login(token);//会调用Reaml的认证的内容
      /*  返回成功页面  */
    } catch (Exception e) {
       /*  返回失败页面  */
        }
  


3.2 Reaml部分


public class ShiroRealm extends AuthorizingRealm{
    @Autowired
    private UserDao dao;
    //授权方法
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
        System.out.println("------授权------");
        String name=(String)arg0.getPrimaryPrincipal();
        User user=dao.getByAccount(name);
        SimpleAuthorizationInfo  info=new SimpleAuthorizationInfo();
        List roleList=user.getRoles();
        //获取所有的角色和权限信息存入info 
        for(int i=0;i perList=roleList.get(i).getPermissions();
            for (int j = 0; j 

4. shiro标签使用

新建jsp页面,引入shiro标签  <%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags"%>

4.1认证标签

用户名 密码
对于用户分为以下的三种
游客
未登录用户
登陆用户
guest游客
user用户
authenticated登陆用户
notAuthenticated未登录用户
principal输出当前用户信息,通常为登录帐号信息
4.2权限标签

hasRole   验证当前用户是否属于该角色

lacksRole   与hasRole标签逻辑相反,当用户不属于该角色时验证通过

hasAnyRole   验证当前用户是否属于以下任意一个角色。
hasPermission   验证当前用户是否拥有指定权限

lacksPermission   与hasPermission标签逻辑相反,当前用户没有制定权限时,验证通过。

	
	
个人办公


公文管理


行政办公


公共信息


权限管理


5其他

5.1注销功能

Subject subject=SecurityUtils.getSubject();

subject.logout();//调用注销功能  可以清除cookie内容

5.2会话功能

可以使用subject获取Session

Session session=SecurityUtils.getSubject().getSession();

session.setAttribute("name", "459");//存入你想存放在Session的数据









你可能感兴趣的:(学习记录)