`
elfasd
  • 浏览: 98448 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

shiro spring简单应用

阅读更多

最近有个小项目,采用公司内部的安全认证架构的话太重,就采用shiro来集成了。
各种配置也是网上一顿摘抄,根据自身情况进行的修改

 

一、项目的认证需求:
1、登录/登出
2、用户/岗位/资源 权限配置
二、数据库表结构
shiro只负责认证等逻辑,权限相关的表还是需要自己设计
这里就复用我们以前项目的表结构,其他大部分字段都没有用
一共有5张表:(附件createTable.sql是几张表的建表及数据:mysql)
1、t_common_grade  岗位表 
2、t_common_gradetask 岗位资源表
3、t_common_task 资源表
4、t_common_user 用户表
5、t_common_usergrade 用户岗位表

 

三、集成web项目(SSH)

1、引入jar:shiro-all-1.2.4.jar及其相关依赖
2、web.xml配置
    在web.xml中增加拦截器:

<!-- shiro权限配置 开始 -->
	 <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>
<!-- shiro权限配置 结束 -->

 注意,如果项目没有什么特殊需求的话,该拦截器最好放在第一个位置

 

3、与spring集成的配置文件:applicationContext-shiro.xml 添加到spring总配置中

a:这个项目采用 shiro JdbcRealm配置方式

b:第28 - 33行是和数据库表相关的配置,主要就是获取用户、获取用户角色(岗位)、获取岗位权限(资源)

c:需要注意的是,如果数据库中用户的密码采用MD5加密的话,需要增加特殊配置,见下面的注释

    MD5加密可以采用shiro带的工具类Md5Hash:String passwd = new Md5Hash("yourPwd").toString();

d:第51 - 54行是具体的拦截策略 根据自己项目的实际情况进行配置

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	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-2.5.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-2.5.xsd"
	default-autowire="byName" default-lazy-init="true">
	
	<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"></bean>  
	<!-- 如果数据库密码是MD5存储的 那么下面的配置是必须的 -->
	<bean id="credentialsMatcher" class="org.apache.shiro.authc.credential.Md5CredentialsMatcher"></bean>  
	<!-- 缓存管理 -->  
    <bean id="cacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager"></bean>
    <!--   
      	使用Shiro自带的JdbcRealm类  
      	指定密码匹配所需要用到的加密对象  
      	指定存储用户、角色、权限许可的数据源及相关查询语句  
     --> 
    
     <bean id="jdbcRealm" class="org.apache.shiro.realm.jdbc.JdbcRealm">  
        <property name="credentialsMatcher" ref="credentialsMatcher"></property>  
        <property name="permissionsLookupEnabled" value="true"></property>  
        <property name="dataSource" ref="dataSource"></property>  
        <property name="authenticationQuery"  
            value="SELECT userpwd FROM T_COMMON_USER WHERE usercode = ?"></property>  
        <property name="userRolesQuery"  
            value="SELECT ug.gradeid from t_common_user u,t_common_usergrade ug where
             u.u_id=ug.u_id and u.usercode=?"></property>  
        <property name="permissionsQuery"  
            value="select distinct t.taskcode from t_common_task t,t_common_gradetask gt where t.task_id = gt.taskid and gt.gradeid=?"></property>  
    </bean>  
    
    <!-- Shiro安全管理器 -->  
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">  
        <property name="realm" ref="jdbcRealm"></property>  
        <property name="cacheManager" ref="cacheManager"></property>  
    </bean>  
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">  
        <!-- Shiro的核心安全接口,这个属性是必须的 -->  
        <property name="securityManager" ref="securityManager"></property>  
        <!-- 要求登录时的链接(登录页面地址),非必须的属性,默认会自动寻找Web工程根目录下的"/login.jsp"页面 -->  
        <!-- <property name="loginUrl" value="/security/login"></property>   -->
        <!-- 登录成功后要跳转的连接(本例中此属性用不到,因为登录成功后的处理逻辑在LoginController里硬编码) -->  
        <!-- <property name="successUrl" value="/" ></property> -->  
        <!-- 用户访问未对其授权的资源时,所显示的连接 -->  
        <property name="unauthorizedUrl" value="/"></property>  
        <property name="filterChainDefinitions">  
            <value>  
                /login/*=anon <!-- 不拦截登录/登出界面的请求 -->
                /bs/**=anon 	<!-- 不拦截登录界面等使用的JS CSS文件 -->
                /layout/**=anon <!-- 不拦截SiteMesh3使用的JS CSS文件 -->
                /**=authc <!-- 拦截除上面之外的所有请求 -->
            </value>  
        </property>  
    </bean>  
</beans>

 4、登录Action

 

a:登录认证

  UsernamePasswordToken token = new UsernamePasswordToken("yourUserName",yourPassWord); 
  token.setRememberMe(true);  
  Subject subject = SecurityUtils.getSubject();
  if (subject.isAuthenticated()) {
//如果认证成功 .....
}else{
//如果认证失败
}

 b:登出

Subject subject = SecurityUtils.getSubject(); 
			subject.logout();

 5、前台界面权限配置

     可以通过<shiro:hasPermission>等一堆标签达到粗颗粒或者精准的控制

<div class="box-footer">
					<div class="row">
						<div class="col-xs-6"></div>
						<div class="col-xs-2">
							<shiro:hasPermission name="gqis_config_menu_add">  
								<button type="button" class="btn btn-block btn-info" id="menuAdd">增加</button>
							</shiro:hasPermission>
						</div>
						<div class="col-xs-2">
							<shiro:hasPermission name="gqis_config_menu_update"> 
								<button type="button" class="btn btn-block btn-info"
									id="menuUpdate">修改</button>
							 </shiro:hasPermission>
						</div>
						<div class="col-xs-2">
							<button type="button" class="btn btn-block btn-info"
								id="menuDelete">删除</button>
						</div>
					</div>

 

 四、总结

 这里的配置只是shiro功能的一角,但是对于一个小项目来讲,够用了:不要为了技术而技术,需求应用才是最大的推动力

 

分享到:
评论

相关推荐

    简单配置 shiro + spring +springMVC+hibernate简单框架

    -- shiro简单配置 --&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.shiro&lt;/groupId&gt; &lt;artifactId&gt;shiro-core&lt;/artifactId&gt; &lt;version&gt;1.2.0&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.shiro...

    Spring Security应用实践,整合redis缓存

    小项目有Shiro的比较多,因为相比与SpringSecurity,Shiro的上手更加的简单。 一般Web应用的需要进行认证和授权。 ​认证:验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户 ​授权:经过认证后...

    shiro 1.4.1.rar

    目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大. Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 ...

    Shiro权限框架由浅入深讲解教程课件

    Shiro是一个强大且易用的Java平台的开源权限框架,用于身份验证、授权、加解密和会话管理,它使用简单,可以快速、轻松地让任何应用程序获得如下需求的支持: (1)用户,角色,权限,资源; (2)用户分配角色,...

    Spring Boot 整合 Shiro.docx

    Apache Shiro 是一个功能强大、灵活的,开源的安全框架。它可以干净利落地处理身份验证、授权、...一个好的安全框架应该屏蔽复杂性,向外暴露简单、直观的 API,来简化开发人员实现应用程序安全所花费的时间和精力。

    Shiro+SSM+SpringBoot.pdf

    目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。...

    Shiro开发文档

    当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时 可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。对于它俩到底哪个 好,这个不必纠结,能更简单的解决...

    spring mvc + spring data jpa + redis + shiro 集成

    spring mvc + spring data jpa + redis + shiro 集成加应用 简单的写了一个demo 如果有报CacheTranscoder.java,DesBase64Tool.java和DESPlus.java 类找不到相关的错误,直接删掉就行,这个是有关加密的算法 另外...

    整合SSM框架以及Shiro实现了简单的权限控制 ##文件目录 src/main/java/config/**:相关配置文件目录

    通过整合SSM框架和Shiro,可以实现对应用程序的简单权限控制。 在`src/main/java/config`目录下,我们可以找到一系列的配置文件,这些文件对于SSM框架和Shiro的正常运行至关重要。以下是这些配置文件的简要说明: ...

    Spring Boot Examples

    Spring boot使用的各种示例,以最简单、最实用为标准 spring-boot-helloWorld:spring-boot的helloWorld版本 spring-boot-mybaits-annotation:注解版本 spring-boot-mybaits-xml:xml配置版本 spring-boot-...

    shiro安全框架

    shiro安全框架+spring的完整oa项目开发,简单应用。。

    springboot和shiro的结合百知网

    目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。...

    SpringBoot搭建的shiro鉴权的最简单的登录demo(绝对可用)

    直接把项目导入idea就能打开使用,该项目在简单实现shiro登录鉴权的基础上,还实现了接收数据的统一加工处理模块,在接收post或者get请求后,能返回固定模板格式的json数据给前端,对于初期的学习与应用很有帮助。...

    使用Apache Shiro保护你的WEB应用

    Apache Shiro是一个Apache项目...与JAAS和Spring Security比较,Apache Shiro在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势。本文介绍了Apache Shiro的基础知识和核心架构,同时给出了一个典型使用示例。

    spring-boot示例项目

    Spring Boot简化了基于Spring的应用开发,通过少量的代码就能创建一个独立的、产品级别的Spring应用。 Spring Boot为Spring平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始。多数Spring Boot应用只...

    ssm+shiro(安全框架)+redis项目实践

    大部分人认为 Shiro 比 Security 要简单。我的观点赞成一半一半吧,首先 Shiro 确实和 Security 是同类型的框架,主要用来做安全,也就是我们俗称权限校验(控制)。居多人对 Shiro 的定义为好入门。我选型为 Shiro ...

    SpringSecurity的Web应用和指纹登录实践

    Shiro配置简单,上手快,满足一般应用的安全需求,但是功能相对单一。SpringSecurity安全粒度细,与SpringFramework无缝集成,满足绝大多数企业级应用的安全需求,但是配置复杂,学习曲线陡峭。SpringSecurity相对...

    SpringSecurity-从入门到精通 demo源码

    小项目有Shiro的比较多,因为相比与SpringSecurity,Shiro的上手更加的简单。 ​ 一般Web应用的需要进行认证和授权。 ​ 认证:验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户 ​ 授权:经过...

    根据《教师教学质量评价实施方案》开发教师评价系统 技术关键词:Java、Spring、SpringBoot、Mybatis、M

    Spring Boot: Spring Boot是Spring的一个子项目,它提供了一种更简单、更快速的方式来构建Spring应用程序。在教师评价系统中,Spring Boot可以帮助开发人员更快速地构建和部署应用程序。 Mybatis: Mybatis是一个...

Global site tag (gtag.js) - Google Analytics