`
elfasd
  • 浏览: 100423 次
  • 性别: 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功能的一角,但是对于一个小项目来讲,够用了:不要为了技术而技术,需求应用才是最大的推动力

 

分享到:
评论

相关推荐

    cas+shiro+spring实例

    标题 "cas+shiro+spring实例" 涉及到的是一个集成CAS(Central Authentication Service)和Apache Shiro的Spring应用程序实例。这个实例是专为初学者设计的,旨在帮助他们理解和实现基于CAS的单点登录(Single Sign-...

    shiro整合spring项目实例

    Shiro 可以无缝集成到Spring应用中,通过Spring的Bean配置,我们可以将Shiro的安全组件注入到Spring容器中。这包括SecurityManager、Realm、Filter等核心组件,从而利用Spring的依赖注入(DI)和面向切面编程(AOP...

    Shiro+Spring Security学习文档

    在IT安全领域,Apache Shiro和Spring Security是两个非常重要的框架,它们主要用于应用程序的安全管理,包括身份验证、授权、会话管理和加密等。本学习文档集合了这两个框架的相关知识,旨在帮助开发者深入理解和...

    Spring MVC整合shiro

    Spring MVC 是一款强大的MVC框架,用于构建企业级的Web应用程序,而Apache Shiro则是一款安全框架,负责处理身份验证、授权(权限控制)、会话管理和安全性相关的其他功能。将两者整合可以实现一个完整的基于角色的...

    springcloud-shiro

    通过内嵌的Tomcat服务器,自动配置的特性,以及对各种常用库的默认设置,Spring Boot使得创建独立的、生产级别的基于Spring的应用变得简单。 Zuul是Spring Cloud生态系统中的一个组件,主要负责服务的路由和过滤。...

    shiro和spring整合,使用权限注解

    在提供的压缩包"shiroSpring"中,我们可以看到以下关键文件: 1. `shiro-config.xml`: Shiro的配置文件,包含了SecurityManager、Realm和其他配置。 2. `spring-config.xml`: Spring的配置文件,用于加载Shiro配置...

    spring+shiro简单整合

    Spring是一个全面的Java企业级应用开发框架,而Apache Shiro则是一个安全框架,主要用于处理身份验证、授权、会话管理和加密等安全相关的问题。接下来,我们将详细讨论如何将Spring与Shiro进行简单整合,以及这个...

    springshiro

    SpringShiro是一个集成框架,将Spring的依赖注入和管理能力与Apache Shiro的安全功能相结合,以实现更加灵活、高效的企业级应用安全控制。在本项目中,它还整合了MongoDB数据库,提供了一种非关系型数据库的支持,...

    shiro与spring整合

    Shiro 通过简单易用的 API,使开发者能够快速地实现应用的安全控制。 2. **Spring 框架**: Spring 是一个全面的企业级应用开发框架,提供依赖注入、AOP(面向切面编程)、事务管理等功能。在 Java 应用中,Spring...

    shiro+spring集成

    Apache Shiro 和 Spring 的集成是企业级 Java 应用中常见的安全框架组合,它们共同为应用程序提供用户认证、授权和会话管理等功能。Shiro 是一个轻量级的安全框架,而 Spring 则是一个全面的后端开发框架。下面将...

    shirodemo(spring3+shiro)(认证授权)

    总结,"shirodemo"项目展示了Spring3与Shiro 结合进行用户认证与授权的实例,涵盖了Shiro的核心功能和实际应用场景。通过学习和实践,开发者可以快速掌握如何在自己的项目中运用Shiro来构建安全体系。

    spring boot+shiro 权限认证管理案例

    Spring Boot 和 Apache Shiro 的整合是企业级应用中常见的权限认证和安全管理方案。Spring Boot 提供了简化 Java 应用程序开发的框架,而 Shiro 是一个轻量级的安全框架,专注于身份验证、授权、会话管理和加密。...

    spring整合shiro登录小例子

    Spring 和 Apache Shiro 的整合是企业级应用中常见的权限管理解决方案。这个"spring整合shiro登录小例子"提供了一个简化的实例,展示了如何在 Spring 框架中集成 Shiro 进行用户登录验证和权限控制。下面我们将深入...

    Shiro和Spring整合 这个资源真的可运行

    Shiro 是一个轻量级的安全框架,而 Spring 是一个全面的企业级应用开发框架,两者整合能使得应用的安全管理更加便捷和灵活。 **Shiro 框架简介** Apache Shiro 主要提供了身份验证(Authentication)、授权...

    简单配置 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 boot shiro

    Spring Boot 提供了快速构建和配置Spring应用的便利性,而Shiro则是一个强大且易用的安全管理框架,专注于身份验证、授权、会话管理和安全性。 **一、Spring Boot 概述** Spring Boot 是基于Spring框架的开发工具,...

    springboot+springshiro实现简单的登陆注册模块

    通过自动配置、起步依赖和内嵌服务器,Spring Boot使得创建独立的、生产级别的基于Spring的应用变得异常简单。 **Spring Shiro** 是Apache的一个开源项目,用于提供身份验证、授权、会话管理和安全相关的服务。它是...

    shiro最简单整合版本

    3. 配置 Shiro:在主配置文件(如 shiro.ini 或者 Spring 配置文件)中,设置 Realm,以及其它 Shiro 配置项,如缓存、过滤器链等。 ```ini [main] myRealm = com.example.MyRealm securityManager.realms = $...

    spring、springmvc、shiro集成空框架

    Spring、SpringMVC和Shiro是Java开发中常用的三大框架,它们在企业级应用开发中起着关键作用。Spring作为核心容器,管理着应用的组件和依赖;SpringMVC是Spring框架的一部分,专用于构建Web应用程序的前端控制器;而...

Global site tag (gtag.js) - Google Analytics