Shiro

shiro

shiro三大核心组件:

  1. subject:用户,也可以是程序,存放用户的验证信息:帐号,密码;

  2. SecurityManager:用于管理subject

    包含了很多组件:认证器(需要通过Realm)

    ​ 授权器(授予用户对应的权限,判断账户是否有权限

    1. Realm:数据源,用户信息的来源

案例:静态案例:账户信息,权限信息存放在文件中.

  1. 新建maven项目。

  2. pom.xml添加shiro的jar包:1.4.0:bundle;commons-logging

    添加插件:org.apachr.felix—maven-bundle-plugin

  3. shiro配置文件:shiro.ini

    1
    2
    3
    4
    5
    6
    7
    8
    [users]                //用户的声明
    addd=123456,firstmanager         //用户名,密码,角色
    xiaohong=22222,commonuser
    
    

    [roles]
    admin=*
    firstmanager=index.jsp,menus.jsp,users.jsp
    commonuser=index.jsp,users.jsp

    1)权限:能干什么,例如:能访问index.jsp,users.jsp

    ​ 为了简化, 方便对权限的管理,有了角色;角色是一类权限的总称

    2)角色:管理员:users.jsp,index.jsp…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class TestShiro{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("input userName");
        String userName = sc.next();
        System.out.println("input password");
        String pwd = sc.next();
        //创建工厂:生产SecurityManager对象
        //创建工厂的过程中需要读取shiro.ini文件
      Factory<SecurityManager> factory = new iniSecurityManagerFactory("classpath:shiro.ini");
       //得到SecurityManager对象
        SecurityManager securityManager = factory.getInstance();
        //构建subject
        Subject subject = SecurityUtils.getSubject();
        //告知subject登录信息,帐号,密码
        //把帐号和密码封装在token对象中
        UsernamePasswordToken token = new UsernamePasswordToken(userName,pwd);
        //把token传入到subject对象中,进行登录
        //login方法判断帐号密码是否正确
        try{
        subject.login(token);
        //判断当前登录的账户是否拥有某个页面的访问权限
            if(subject.isPermitted("menue.jsp")){
                System.out.println("可以访问menue.jsp");
            }else{
                System.out.println("不可以访问menue.jsp");
            }
            if(subject.isPermitted("users.jsp")){
                System.out.println("可以访问users.jsp");
            }else{
                System.out.println("不可以访问users.jsp");
            }
        }
    }
}

读取配置文件的设置方式

  • 在核心控制器servlet内部通过initparam配置

  • 在所有servlet外部,通过contextparam配置

  1. web.xml

    配置了shiro的过滤器

  2. 配置springmvc-config.xml

    扫描指定包

    视图解析器

  3. 配置spring-config.xml

    配置shiro的bean

  • 验证规则:
    • 哪些页面可以直接访问,无需验证
    • 告知登录页面路径
    • 哪些页面登录后访问(只要登录即可)