文档章节

spring整合shiro

金馆长1
 金馆长1
发布于 2015/08/21 17:14
字数 842
阅读 448
收藏 21
点赞 0
评论 4
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;
        }
    }
}  



© 著作权归作者所有

共有 人打赏支持
金馆长1
粉丝 17
博文 43
码字总数 29363
作品 0
海淀
程序员
加载中

评论(4)

金馆长1
金馆长1

引用来自“半心丶守”的评论

很不错 嘿嘿
非常感谢~么么哒~
半心丶守
很不错 嘿嘿
金馆长1
金馆长1

引用来自“你个大胖子”的评论

一直想学shiro,感谢提供了很棒的demo

谢谢13一起学习
你是红薯派来的逗逼吗
你是红薯派来的逗逼吗
一直想学shiro,感谢提供了很棒的demo
整合 SpringMVC 3.2.5 和 Shiro 1.2.3

按着《SpringMVC整合Shiro》这篇博文来做即可。但是,在启动时发现Spring的配置被载入两次,很明显SpringMVC 和 Shiro 所使用的不是同一个 Spring Application Context。在参考《ContextLoad...

xray2100
2014/03/14
0
1
SpringMvc + Shiro[数据库存权限] 配置 ;[附git.oschina的项目地址]

一 shiro简介 apache shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证、授权、加密、会话管理等功能。认证和授权为权限控制的核心,简单来说,“认证”就是证明“你是谁?” We...

王庭
2015/10/28
0
3
Archx/spring-agg

#SPRING-AGG 这个一个框架整合案列,包含 SpringMVC/MyBatis/Apache Shiro 。 演示数据 演示数据请导入 db.sql 演示账号密码均为 SpringMVC 配置 演示项目使用的是 RESTful 风格,不是传统的...

Archx
2015/01/12
0
0
使用 Smart Security 实现安全控制

很多朋友都问过我同样一个问题:“Smart 目前有身份认证与权限管理等安全控制功能吗?” 当听到这样的问题时,我真的非常不好意思,实在是没有这方面的特性。不过当我学习了 Shiro 以后,让我...

黄勇
2014/03/31
0
11
将 Shiro 作为应用的权限基础 五:SpringMVC+Apache Shiro+JPA(hib

点击链接加入群【JavaEE(SSH+IntelliJIDE+Maven)】:http://jq.qq.com/?wv=1027&k=L2rbHv 将 Shiro 作为应用的权限基础 五:SpringMVC+Apache Shiro+JPA(hibernate)整合配置 配置web.xml,a...

moz1q1
2014/08/22
0
0
freemarker+shiro+spring mvc+spring+mybatis整合

shiro配置: <context:component-scan base-package="security" /> classpath:security/shiro/mapper/ShiroMapper.xml /login=anon/logout=anon/user/=authc spring mvc设置: text/html;ch......

Carlos_Tse
2012/02/06
0
7
springmvc返回的页面404 在线等答案

说明:项目是Spring Springmvc Hibernate Shiro整合的测试项目 首先贴出我的配置文件的关键配置 web.xml 中DispatchServlet配置的是拦截全部路径,如下图 springmvcorg.springframework.web...

梁阳波
2014/07/31
4.6K
3
快速开发框架--SpringBlade

SpringBlade,是基于多个优秀的开源项目(spring+springmvc+beetl+beetlsql+shiro),高度整合封装而成的快速开发平台。 鸣谢 1.JFinal 2.eova 3.hutool 4.beetl 5.beetlsql 6.dreamlu 7.ki...

smallchill
2016/09/02
14.3K
8
SpringBlade 快速开发平台 V1.0 发布

SpringBlade 是基于多个优秀的开源项目,将spring、springMVC、beetl、beetlsql、shiro整合而成的快速开发平台。 地址:https://git.oschina.net/smallc/SpringBlade 内置功能 用户管理 角色...

smallchill
2016/09/02
6.8K
14
框架性能和易用优劣比较----之我见

1、对比(Jackson、json-lib、fastjson)性能选择Jackson为数据传输json转换器 。fastjson对null数据处理的不是很好得需要自己重新写基于SerializerFeature的实现类。 http://hjg1988.iteye...

晨润--菜菜
2014/03/07
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

pbgo: 基于Protobuf的迷你RPC/REST框架

https://www.oschina.net/p/pbgo

chai2010
37分钟前
0
0
rsync工具介绍、常用选项以及通过ssh同步

linux下的文件同步工具 rsync rsync是非常实用的一个同步工具,可以从a机器到b机器传输一个文件,也可以备份数据,系统默认没有这个工具,要使用命令 yum install -y rsync 安装。 rsync的命...

黄昏残影
53分钟前
0
0
OSChina 周四乱弹 —— 表妹要嫁人 舅妈叮嘱……

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @哈哈哈哈哈嗝:一定要听——The Pancakes的单曲《咁咁咁》 《咁咁咁》- The Pancakes 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :...

小小编辑
今天
245
4
流利阅读笔记30-20180719待学习

重磅:让人类得老年痴呆的竟是它? Lala 2018-07-19 1.今日导读 去年奥斯卡最佳动画长片《寻梦环游记》里有一句经典台词:“比死亡更可怕的,是遗忘”。在电影中,年迈的曾祖母会重复说一样的...

aibinxiao
今天
3
0
1.16 Linux机器相互登录

Linux机器之间以密码方式互相登录 运行命令#ssh [ip address],标准命令:#ssh [username]@ip, 如果没有写用户名,则默认为系统当前登录的用户 命令#w查看系统负载,可查看到连接到该主机的...

小丑鱼00
今天
0
0
about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
3
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部