为什么80%的码农都做不了架构师?>>>   

web.xml:

<filter><filter-name>shiroFilter</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class><init-param><param-name>targetFilterLifecycle</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>shiroFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

applicationContext-Shiro.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"default-lazy-init="true"><description>Shiro安全配置</description><bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"><!-- 数据库认证的实现 --><property name="realm" ref="shiroAuthRealm" /><!-- Session管理器 --><property name="sessionManager" ref="sessionManager" /><!-- 缓存管理器 --><property name="cacheManager" ref="shiroCacheManager" /></bean><!-- Session管理器 --><bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"><!-- 超时时间 --><property name="globalSessionTimeout" value="1800000" /><!-- Session存储的实现 --><property name="sessionDAO" ref="shiroSessionDao" /><!-- SessionIdCookie的实现 --><property name="sessionIdCookie" ref="sharesession" /><!-- 定时检查失效的Session --><property name="sessionValidationSchedulerEnabled" value="true" /></bean><!-- SessionIdCookie的实现 --><bean id="sharesession" class="org.apache.shiro.web.servlet.SimpleCookie">        <constructor-arg name="name" value="SHAREJSESSIONID" />        <property name="path" value="/" />        </bean><!-- Session存储的实现 --><bean id="shiroSessionDao" class="org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO" /><!-- 单机Session --><bean id="shiroCacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager" /><!-- 数据库认证的实现 --><bean id="shiroAuthRealm" class="web.service.ShiroAuthRealm"><!-- 注入 shiroAuthService --><property name="shiroAuthService" ref="shiroAuthService" />        </bean><!-- ShiroFilter --><bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"><property name="securityManager" ref="securityManager" /><property name="loginUrl" value="/login" /><property name="successUrl" value="/login/main.do" /><!-- Shiro连接约束配置,即过滤链的定义 -->  <!-- 此处可配合我的这篇文章来理解各个过滤连的作用http://blog.csdn.net/jadyer/article/details/12172839 -->  <!-- 下面value值的第一个'/'代表的路径是相对于HttpServletRequest.getContextPath()的值来的 -->  <!-- anon:它对应的过滤器里面是空的,什么都没做,这里.do和.jsp后面的*表示参数,比方说login.jsp?main这种 -->  <!-- authc:该过滤器下的页面必须验证后才能访问,它是Shiro内置的一个拦截器org.apache.shiro.web.filter.authc.FormAuthenticationFilter -->  <property name="filterChainDefinitions"><value>            /commons/css/** = anon/commons/images/** = anon/commons/js/** = anon                        /regist/** = anon/login = authc/logout = logout                /** = user</value></property></bean><!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->  <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" /><bean id="formAuthenticationFilter"   class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter"/>
</beans>

自定义的Realm类:

public class ShiroAuthRealm extends AuthorizingRealm {
/** 
* 为当前登录的Subject授予角色和权限 
* @see  经测试:本例中该方法的调用时机为需授权资源被访问时 
* @see  经测试:并且每次访问需授权资源时都会执行该方法中的逻辑,这表明本例中默认并未启用AuthorizationCache 
* @see   个人感觉若使用了Spring3.1开始提供的ConcurrentMapCache支持,则可灵活决定是否启用AuthorizationCache 
* @see  比如说这里从数据库获取权限信息时,先去访问Spring3.1提供的缓存,而不使用Shior提供的AuthorizationCache 
*/  

    private ShiroAuthService shiroAuthService;
    public ShiroAuthService getShiroAuthService() {
        return shiroAuthService;
    }
    public void setShiroAuthService(ShiroAuthService shiroAuthService) {
        this.shiroAuthService = shiroAuthService;
    }
    /**
     * 
     * 认证回调函数,登录时调用.
     * 
     */
//此处是写死的认证,实际中需要将两个admin替换成从数据库中查询的admin
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(
            AuthenticationToken authcToken) throws AuthenticationException {
        UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
        String userName = token.getUsername();
        String password = String.valueOf(token.getPassword());
        if (userName.equals("admin") && password.equals("admin")) {
            return new SimpleAuthenticationInfo(new ShiroUser("1", userName,
                    "cuijianbo"), password, "cuijianbo");
        } else {
            return null;
        }
    }
    /**
     * 授权查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用.
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(
            PrincipalCollection principals) {
        ShiroUser shiroUser = (ShiroUser) principals.getPrimaryPrincipal();
        String username = shiroUser.getLoginName();
        if (username != null) {
            SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
            info.addStringPermission("add");
            info.addStringPermission("del");
            info.addStringPermission("edit");
            info.addStringPermission("view");
            return info;
        }
        return null;
    }
    /**
     * 
     * 自定义Authentication对象,使得Subject除了携带用户的登录名外还可以携带更多信息
     * 
     */
    public class ShiroUser implements Serializable {
        private static final long serialVersionUID = -1373760761780840081L;
        public String userid;
        public String loginName;
        public String name;
        public ShiroUser(String userid, String loginName, String name) {
            this.userid = userid;
            this.loginName = loginName;
            this.name = name;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getUserid() {
            return userid;
        }
        public void setUserid(String userid) {
            this.userid = userid;
        }
        public String getLoginName() {
            return loginName;
        }
        public void setLoginName(String loginName) {
            this.loginName = loginName;
        }
    }

}

转载于:https://my.oschina.net/jinxf/blog/495594

spring整合shiro相关推荐

  1. spring整合shiro权限管理与数据库设计

    之前的文章中我们完成了基础框架的搭建,现在基本上所有的后台系统都逃不过权限管理这一块,这算是一个刚需了.现在我们来集成shiro来达到颗粒化权限管理,也就是从连接菜单到页面功能按钮,都进行权限都验证, ...

  2. 文件用户Apache shiro学习笔记+ spring整合shiro (一)

    改章节朋友在青岛游玩的时候突然想到的...这两天就有想写几篇关于文件用户的博客,所以回家到之后就奋笔疾书的写出来发表了 Apache Shiro官网:http://shiro.apache.org/ ...

  3. springMVC整合shiro权限框架示例与实践

    2019独角兽企业重金招聘Python工程师标准>>> 为什么写这篇文章 看过那么多框架.教程,大部分shiro的文章或教程是我见过思路最糟糕的.作者完不清楚想要表达什么起到什么作用 ...

  4. apache shiro怎么升级_Springboot整合Shiro之授权

    第二条为推广文章,阅读一次0.3kuai, 收入用于网站服务器及资源索取. Shiro是我们常用的一个权限管理框架,本文的重点是来介绍下在SpringBoot环境下我们怎么来使用Shiro. 一.添加 ...

  5. Shiro学习总结(10)——Spring集成Shiro

    1.引入Shiro的Maven依赖 [html] view plaincopy <!-- Spring 整合Shiro需要的依赖 --> <dependency> <gr ...

  6. 降龙十八掌之 springboot整合shiro(含MD5加密)

    java学习爱好者 2019-05-27 16:21:00 开发环境: 1.mysql - 5.7.21 2.navicat(mysql客户端管理工具) 3.idea 2017 4.jdk9 5.to ...

  7. shiro和Spring整合使用注解时没有执行realm的doGetAuthorizationInfo回调方法的解决

    shiro和Spring整合使用注解时没有执行realm的doGetAuthorizationInfo回调方法的解决 from :http://blog.csdn.net/babys/article/ ...

  8. Spring Boot2 整合 Shiro ,两种方式全总结!

    前言:在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 Shiro. 文章目录 一.Spring Securit ...

  9. Shiro第四篇【Shiro与Spring整合、快速入门、Shiro过滤器、登陆认证】

    Spring与Shiro整合 导入jar包 shiro-web的jar. shiro-spring的jar shiro-code的jar 快速入门 shiro也通过filter进行拦截.filter拦 ...

最新文章

  1. 当下常用的webpack版本_细说 webpack系列 1. 为什么要选择 webpack
  2. 一些实用的Javascript代码
  3. 15 MM配置-BP业务伙伴-定义供应商主记录的编号范围
  4. UE4 Light Functions(光源函数)
  5. yii2 shi用modal弹窗 select2搜索框无法使用
  6. Java 继承 小练习
  7. 论文评析-Gradient Boosting Neural Networks: GrowNet,Preprint, 2021和Gradient boosting原理介绍
  8. ASP.NET 安全认证(三)
  9. docker-ce 的安装与镜像加速
  10. 寻找那些神奇的自幂数---C语言
  11. 20191207-CHKDSK命令修复磁盘教程
  12. Delphi大师弗兰克·宝兰德(Frank Borland)回来了!
  13. sql 数据库创建及建表,
  14. 半导体激光器的工作原理
  15. 防疫中计算机的应用有哪些,计算机在人们生活中的应用,在我们的生活中,哪些与计算机的应用有关?...
  16. 微软面试100题(含全部答案)
  17. 马克思恩格斯生态思想的理论基础研究
  18. 这些肺腑之言,送给想搞副业的程序员们
  19. 宝安区2021年高考成绩查询入口,2021年宝安区学位申请积分入学积分办法
  20. vscode的workspace备忘python

热门文章

  1. Android Studio隐藏标题栏(Bar)
  2. (补)20200911:力扣204周周赛题解下
  3. VB 域名转换IP地址函数
  4. VB实现可执行文件运行时自删除
  5. Mask R-CNN官方实现“又”来了!基于PyTorch,训练速度是原来2倍
  6. 2018谷歌学术影响因子发布:NIPS首次跃进Top 100,CVPR排名泛AI领域第一
  7. 大咖来信 | 张亚勤@2018:终日“闭关”读论文,思考终极算法
  8. 便宜可靠的激光雷达可能要来了!Luminar关键部件成本降到3美元
  9. django文件——django + jquery-file-upload上传篇(二)-- 插件实现文件上传+进度条显示 +拖入文件上传...
  10. 可可托海将打造研学旅游基地促经济发展