zoukankan      html  css  js  c++  java
  • shiro框架--权限管理

    一.maven坐标

    1 <!-- 权限控制 框架 -->
    2         <dependency>
    3             <groupId>org.apache.shiro</groupId>
    4             <artifactId>shiro-all</artifactId>
    5             <version>${shiro.version}</version>
    6         </dependency>

    二.shiro框架的四大功能

      1.认证

      2.授权

      3.加密

      4.权限管理

    三.shiro框架环境搭建

      1.导入maven坐标

      2.在web.xml中配置spring提供的框架,用户整合shiro框架

    1 <!-- 配置spring框架过滤器用于整合shiro框架 -->
    2     <filter>
    3         <filter-name>shiroFilter</filter-name>
    4         <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    5     </filter>
    6     <filter-mapping>
    7         <filter-name>shiroFilter</filter-name>
    8         <url-pattern>/*</url-pattern>
    9     </filter-mapping>

          注意,此配置一定要在struts配置之前

      3.配置shiro框架相关对象

      在spring配置文件applicationContext.xml中注册shiroFilter在spring配置文件applicationContext.xml中注册shiroFilter

     1 <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
     2         <!-- 注入shiro框架核心对象,安全管理器 -->
     3         <property name="securityManager" ref="securityManager"/>
     4         <!--private String loginUrl;登录页面
     5                private String successUrl;登录成功后跳转页面
     6                private String unauthorizedUrl;权限不足时的提示页面-->
     7          <property name="loginUrl" value="/login.html"/>
     8          <property name="successUrl" value="/index.html"/>
     9          <property name="unauthorizedUrl" value="/unauthorized.html"/>
    10          <!-- 指定URL拦截规则 -->
    11          <property name="filterChainDefinitions">
    12              <!--authc:代表shiro框架提供的一个过滤器,这个过滤器用于判断当前用户是否已经完成认证,
    13                          如果当前用户已经认证,就放行,如果当前用户没有认证,跳转到登录页面
    14                  anon:代表shiro框架提供的一个过滤器,允许匿名访问-->
    15              <value>
    16                  /css/* = anon
    17                  /images/* = anon
    18                  /js/** = anon
    19                  /validatecode.jsp* = anon
    20                  /userAction_login.action = anon
    21                  /** = authc
    22              </value>
    23          </property>
    24     </bean>

        注册安全管理器对象

    1 <!-- 注册安全管理器 -->
    2     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    3         <property name="realm" ref="bosRealm"></property>
    4     </bean>

      4.登录功能的action

    @ParentPackage("struts-default")
    @Namespace("/")
    @Scope("prototype")
    @Controller
    public class UserAction extends CommonAction<User> {
        
        //属性注入ckeckcode
        private String checkcode;
        public void setCheckcode(String checkcode) {
            this.checkcode = checkcode;
        }
    
        //用户登录功能
        @Action(value="userAction_login",results={@Result(name="home",location="/index.html",type="redirect"),
                @Result(name="login",location="/login.html",type="redirect")})
        public String login(){
            //从Session中获得验证码
            String validatecode = (String) ServletActionContext.getRequest().getSession().getAttribute("key");
            if(StringUtils.isNotBlank(checkcode) && StringUtils.isNotBlank(validatecode) && validatecode.equals(checkcode)){
                //验证码验证通过
                //获得当前用户
                Subject subject = SecurityUtils.getSubject();
                //获得用户名密码令牌
                AuthenticationToken token = new UsernamePasswordToken(getModel().getUsername(),getModel().getPassword());
                try {
                    subject.login(token);
                    User user = (User) subject.getPrincipal();
                    ServletActionContext.getRequest().getSession().setAttribute("loginUser", user);
                    return "home";
                } catch (AuthenticationException e) {
                    e.printStackTrace();
                }
            }else{
                //验证码输入错误
                return LOGIN;
            }
            return LOGIN;
        }
    }

      5.自定义realm

     1 public class BosRealm extends AuthorizingRealm{
     2     
     3     @Override
     4     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
     5         // TODO Auto-generated method stub
     6         return null;
     7     }
     8     
     9     @Autowired
    10     private UserDao userDao;
    11     /**
    12      * 认证方法
    13      */
    14     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    15         UsernamePasswordToken passwordToken =  (UsernamePasswordToken) token;
    16         String username = passwordToken.getUsername();
    17         //查询数据库
    18         User user = userDao.findByUsername(username);
    19         if(user == null){
    20             return null ;
    21         }
    22         AuthenticationInfo info = new SimpleAuthenticationInfo(user, user.getPassword(), this.getName());
    23         return info;
    24     }
    25 }

      注册自定义realm

    <bean id="bosRealm" class="com.itheima.bos.service.realm.BosRealm"></bean>
  • 相关阅读:
    django1.8模板位置的设置setting.py
    django创建工程,用命令
    杨辉三角(生成器generator)
    Git操作的一些注意
    git的一些常用操作命令
    Python合并列表,append()、extend()、+、+=
    ElementTree 解析xml(minidom解析xml大文件时,MemoryError)
    Spring Aop(十六)——编程式的自定义Advisor
    Spring Aop(十五)——Aop原理之Advised接口
    Spring Aop(十四)——Aop自动创建代理对象的原理
  • 原文地址:https://www.cnblogs.com/cocosili/p/7102530.html
Copyright © 2011-2022 走看看