zoukankan      html  css  js  c++  java
  • shiro框架学习(二)

    在这里先在JavaSE项目中演示下shiro的应用

    先不连接数据库,用ini文件代替:

     1 [users]
     2 # user 'root' with password 'secret' and the 'admin' role
     3 root = secret, admin
     4 # user 'guest' with the password 'guest' and the 'guest' role
     5 guest = guest, guest
     6 # user 'presidentskroob' with password '12345' ("That's the same combination on
     7 # my luggage!!!" ;)), and role 'president'
     8 presidentskroob = 12345, president
     9 # user 'darkhelmet' with password 'ludicrousspeed' and roles 'darklord' and 'schwartz'
    10 darkhelmet = ludicrousspeed, darklord, schwartz
    11 # user 'lonestarr' with password 'vespa' and roles 'goodguy' and 'schwartz'
    12 lonestarr = vespa, goodguy, schwartz
    13 
    14 # -----------------------------------------------------------------------------
    15 # Roles with assigned permissions
    16 # 
    17 # Each line conforms to the format defined in the
    18 # org.apache.shiro.realm.text.TextConfigurationRealm#setRoleDefinitions JavaDoc
    19 # -----------------------------------------------------------------------------
    20 [roles]
    21 # 'admin' role has all permissions, indicated by the wildcard '*'
    22 admin = *
    23 # The 'schwartz' role can do anything (*) with any lightsaber:
    24 schwartz = lightsaber:*
    25 # The 'goodguy' role is allowed to 'drive' (action) the winnebago (type) with
    26 # license plate 'eagle5' (instance specific id)
    27 goodguy = winnebago:drive:eagle5

    代码:

     1 package com.shiro.bean;
     2 
     3 import org.apache.shiro.SecurityUtils;
     4 import org.apache.shiro.authc.AuthenticationException;
     5 import org.apache.shiro.authc.IncorrectCredentialsException;
     6 import org.apache.shiro.authc.LockedAccountException;
     7 import org.apache.shiro.authc.UnknownAccountException;
     8 import org.apache.shiro.authc.UsernamePasswordToken;
     9 import org.apache.shiro.config.IniSecurityManagerFactory;
    10 import org.apache.shiro.mgt.SecurityManager;
    11 import org.apache.shiro.session.Session;
    12 import org.apache.shiro.subject.Subject;
    13 import org.apache.shiro.util.Factory;
    14 import org.slf4j.Logger;
    15 import org.slf4j.LoggerFactory;
    16 
    17 public class HelloWord {
    18     private static final Logger log = LoggerFactory.getLogger(HelloWord.class);
    19     public static void main(String[] args) {
    20         String s = "/psp_gs/src/main/resources/trans/index.html";
    21         System.out.println(s.substring(0,s.lastIndexOf("/")));
    22         /*log.info("测试Log4j....");
    23         
    24          * 1.获取安全管理器
    25          * 2.获取用户
    26          * 3.用户验证登录
    27          * 4.权限管理
    28          * 5.角色管理
    29          * 6.session
    30          
    31         //1.获取安全管理器
    32         Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
    33         SecurityManager securityManager = factory.getInstance();
    34         //2.设置安全管理器
    35         SecurityUtils.setSecurityManager(securityManager);
    36         //3.获取subject对象
    37         Subject currentUser = SecurityUtils.getSubject();
    38         Session session = currentUser.getSession();
    39         
    40         session.setAttribute("name", "陈");
    41         
    42         String value = (String)session.getAttribute("name");
    43         if(value != null)
    44             log.info("shiro已经获得了session中的value!");
    45         //验证是否登录
    46         if(currentUser.isAuthenticated() == false){
    47             UsernamePasswordToken token = new UsernamePasswordToken("root", "secret");
    48             token.setRememberMe(true);
    49             try{
    50                 currentUser.login(token);
    51                 log.info("认证成功!");
    52             }catch(UnknownAccountException e){
    53                 log.info("账户不存在!");
    54             }catch(IncorrectCredentialsException e){
    55                 log.info("账户或密码错误!");
    56             }catch(LockedAccountException e){
    57                 log.info("用户已经锁死!");
    58             }catch(AuthenticationException e){
    59                 log.info("认证失败!");
    60             }
    61         }
    62         
    63         if(currentUser.hasRole("goodguy"))
    64             log.info("拥有goodguy角色!");
    65         else
    66             log.info("没有goodguy角色!");
    67         
    68         if(currentUser.isPermitted("winnebago:drive:eagle5"))
    69             log.info("拥有winnebago:drive:eagle5权限!");
    70         else
    71             log.info("没有winnebago:drive:eagle5 权限!");
    72         currentUser.logout();*/
    73     }
    74     
    75     
    76 }

    值得注意的是:

    1.shiro框架将用户登录信息封装为subject,通过自己封装的工具类获取。

    2.以上复杂的构造方式可使用spring框架进行简化。

    shiro框架学习(三)

  • 相关阅读:
    mac 10.15.7 修改PATH
    oc 属性类型一般用法
    ubuntu解压zip文件名乱码
    telnet 退出
    docker 根据容器创建镜像
    mac android adb device 没有显示设备
    Yii2 查看所有的别名 alias
    Yii2 App Advanced 添加 .gitignore
    ubuntu 18.04 搜狗突然就提示乱码
    An error occured while deploying the file. This probably means that the app contains ARM native code and your Genymotion device cannot run ARM instructions. You should either build your native code to
  • 原文地址:https://www.cnblogs.com/cxy2016/p/8920913.html
Copyright © 2011-2022 走看看