`
zhoushu126
  • 浏览: 81654 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

shiro 小结

 
阅读更多
shiro 资料很多,大家可以到网上找,找到后可以改成适合自己方式,就我自己的做个小结,并没有什么新鲜东西,怕忘记而已。

1.shiro 可以直接写JdbcRealm

2.也可以定制自己的,继承AuthorizingRealm就可以了

这里记录下第一种方式并与Spring集成:


第一步:建表
delimiter $$

CREATE TABLE `user` (
  `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_name` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  `email` varchar(50) NOT NULL,
  `mobile_phone` varchar(45) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `ID` (`ID`),
  KEY `ID_2` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8$$


delimiter $$

CREATE TABLE `role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ROLE_ID` varchar(45) NOT NULL,
  `ROLE_NAME` varchar(45) NOT NULL,
  `DESCRIPTION` varchar(45) DEFAULT NULL,
  `CREATE_TIME` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8$$

delimiter $$

CREATE TABLE `user_role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) NOT NULL,
  `role_id` varchar(45) NOT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8$$

delimiter $$

CREATE TABLE `permission` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `permission_id` varchar(45) NOT NULL,
  `permission_name` varchar(45) DEFAULT NULL,
  `permission_note` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8$$

delimiter $$

CREATE TABLE `role_permission` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `role_id` varchar(45) NOT NULL,
  `permission_id` varchar(45) NOT NULL,
  `role_permission_note` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8$$


第二步:集成
<dependency>
		<groupId>org.apache.shiro</groupId>
		<artifactId>shiro-core</artifactId>
		<version>1.2.0</version> 
	</dependency> 
	<dependency>
		<groupId>org.apache.shiro</groupId>
		<artifactId>shiro-web</artifactId>
		<version>1.2.0</version> 
	</dependency> 
	<dependency>
		<groupId>org.apache.shiro</groupId>
		<artifactId>shiro-ehcache</artifactId>
		<version>1.2.0</version> 
	</dependency> 
	<dependency>
		<groupId>org.apache.shiro</groupId>
		<artifactId>shiro-spring</artifactId>
		<version>1.2.0</version> 
	</dependency> 
	<dependency>
		<groupId>net.sf.ehcache</groupId>
		<artifactId>ehcache-core</artifactId>
		<version>2.5.3</version> 
	</dependency> 
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-jdk14</artifactId>
		<version>1.6.4</version> 
	</dependency> 


<bean id="sampleRealm" class="org.apache.shiro.realm.jdbc.JdbcRealm">
		<property name="dataSource" ref="dataSource"></property>
		<property name="authenticationQuery">
			<value>
				select password from user where user_name=?
			</value>
		</property>
		<property name="userRolesQuery">
			<value>
				select a.role_name from role a,user_role b,user c
				where a.role_id=b.role_id and b.user_id=c.id and c.user_name=?
			</value>
		</property>
		<property name="permissionsQuery">
			<value>
				select b.permission_name from role t 
				left join role_permission a on t.role_id=a.role_id 
				left join permission b on a.permission_id=b.permission_id where t.role_name=?
			</value>
		</property>
		<property name="permissionsLookupEnabled" value="true"></property>
		<property name="saltStyle" value="NO_SALT"></property>
		
	</bean>
	<!--  
	<property name="credentialsMatcher" ref="hashedCredentialsMatcher"></property>
	<bean id="hashedCredentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
		<property name="hashAlgorithmName" value="MD5"></property>
		<property name="storedCredentialsHexEncoded" value="false"></property>
		<property name="hashIterations" value="1"></property>
	</bean>
	-->
	<!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->
	<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
	 
	 <!-- AOP式方法级权限检查  -->
	<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" 
	depends-on="lifecycleBeanPostProcessor">
		<property name="proxyTargetClass" value="true" />
	</bean>
	
	<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
		<property name="securityManager" ref="securityManager"></property>
	</bean>
	<!-- 
	<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<property name="excludedExceptions">
			<props>
				<prop key="org.apache.shiro.authz.UnauthorizedException">
					/unauthorized
				</prop>
				<prop key="org.apache.shiro.authz.UnauthenticatedException">
					/unauthorized
				</prop>
			</props>
		</property>
	</bean>
	-->




这里需要注意下SQL的方式,先是user_name,再是role_name


第三步:验证

public String login()throws Exception {
		UsernamePasswordToken token = new UsernamePasswordToken(this.operId,this.password);
		//记录该令牌,如果不记录则类似购物车功能不能使用。
		token.setRememberMe(false);
		//subject理解成权限对象。类似user
		Subject subject = SecurityUtils.getSubject();
		try {
			subject.login(token);
		} catch (UnknownAccountException ex) {//用户名没有找到
			ex.printStackTrace();
		} catch (IncorrectCredentialsException ex) {//用户名密码不匹配
			ex.printStackTrace();
		}catch (AuthenticationException e) {//其他的登录错误
			e.printStackTrace();
		}
		subject.checkPermission("add");
		subject.checkRole("admin");
		if(subject.isPermitted("add")){
			System.out.println("admin");
		}
		
		if(subject.isPermitted("add")){
			System.out.println("add");
		}
		//验证是否成功登录的方法
		if (subject.isAuthenticated()) {
			return Constants.SUCCESS_KEY;
		}
		return Constants.FAILURE_KEY;
}

分享到:
评论

相关推荐

    SSM和Shiro小项目

    SSM和Shiro小项目是一个综合性的Java Web开发实践,主要涵盖了Spring、Spring MVC(SSM)和Apache Shiro这三个核心框架的集成与应用。这个项目旨在帮助开发者理解和掌握如何在实际开发中实现用户身份验证和授权功能...

    spring整合shiro登录小例子

    这个"spring整合shiro登录小例子"提供了一个简化的实例,展示了如何在 Spring 框架中集成 Shiro 进行用户登录验证和权限控制。下面我们将深入探讨相关的知识点。 **1. Spring 框架** Spring 是一个广泛使用的 Java ...

    shiro小案例

    在这个"shiro小案例"中,我们将探讨如何结合Spring(SSM中的S)、Spring MVC和MyBatis(SSM中的M)来实现一个用户登录验证系统。 首先,我们需要理解Shiro的核心概念: 1. **认证**:确认用户身份的过程,通常涉及...

    shiro(shiro1.3.2)

    Apache Shiro是一个强大且易用的Java安全框架,主要用于处理认证、授权、加密以及会话管理等核心安全性问题。在给定的压缩包"shiro1.3.2"中,包含了Shiro的一个核心组件库"shiro-all-1.3.2.jar"以及两个日志管理库...

    shiro1.7.1.zip

    在使用Shiro 1.7.1时,开发者可以根据具体需求选择合适的模块进行集成,例如,Web应用可能会主要依赖`shiro-core`、`shiro-web`和`shiro-spring`,而需要进行复杂加密操作的应用可能需要`shiro-crypto-hash`和`shiro...

    shiro所有版本jar

    Apache Shiro是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,可以非常方便地用于构建和强化应用程序的安全性。Shiro的核心目标是为开发者提供一个简单易用的安全API,使得开发者能够快速...

    Apache_Shiro_使用手册(一)Shiro架构介绍

    ### Apache Shiro 使用手册(一)Shiro架构介绍 #### 一、Shiro简介 Apache Shiro 是一款功能强大且易于使用的 Java 安全框架,它提供了多种安全相关的功能和服务,包括但不限于认证、授权、加密和会话管理。相较...

    shiro_tool.zip

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用。在"shiro_tool.zip"这个压缩包中,我们可以推测可能包含了一些关于Shiro使用的工具类、...

    shiro-demo 的一个小案例

    springMVC+shiro小案例 使用了SpringmVC来部署整个项目的结构,shiro来进行登录用户的权限认证和分配

    shiro所有jar包

    Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、会话管理和加密等功能,使得在Java应用中处理安全性变得更加简单。Shiro不仅适合大型企业级应用,也适用于小型项目,因为它的API设计直观易用。当...

    shiro教程 跟我学Shiro教程

    Apache Shiro是一款强大的Java安全框架,它为应用程序提供了身份验证(Authentication)、授权(Authorization)、会话管理(Session Management)和加密(Cryptography)等核心功能。"跟我学Shiro教程"资源包包含了...

    shiro-redisson基于Redis的ShiroCache和Session实现

    `shiro-redisson` 模块就是为了解决这个问题,将 Shiro 的缓存(Cache)和会话(Session)管理功能与 Redis 结合,实现了基于 Redis 的分布式解决方案。 1. **Redisson 库的介绍** Redisson 是一个全面的 Redis ...

    shiro-jar.zip

    shiro-all-1.7.1.jar,shiro-aspectj-1.7.1.jar,shiro-cache-1.7.1.jar,shiro-config-core-1.7.1.jar,shiro-config-ogdl-1.7.1.jar,shiro-core-1.7.1.jar,shiro-crypto-cipher-1.7.1.jar,shiro-crypto-core-1.7.1.jar...

    Apache shiro 1.13.0源码

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,简化了企业级应用的安全实现。Shiro 1.13.0 是其一个重要的版本,包含了多项更新和改进。在这个版本中,开发者可以深入理解其...

    shiro-core-1.7.1 jar

    shiro shiro-core-1.7.1 jar shiro漏洞

    shiro.freemarker.ShiroTags已打包

    Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了认证、授权、加密和会话管理功能,简化了开发人员在应用程序中处理安全问题的复杂性。ShiroTags 是 Shiro 提供的一套用于模板引擎的标签库,如 Freemarker ...

    shiro权限案例demo

    Apache Shiro是一个强大且易用的Java安全框架,主要用于身份认证、授权(权限控制)、会话管理和加密等安全相关的功能。在这个"shiro权限案例demo"中,我们将深入探讨Shiro如何实现用户权限的管理。 首先,让我们...

    shiro1.7.1全包修补漏洞.rar

    Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密服务。这个"shiro1.7.1全包修补漏洞.rar"文件包含了针对Apache Shiro 1.7.1版本的一些安全修复和更新,旨在解决可能存在的...

    shiro例子,及书籍shiro.rar

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常方便地开发出足够安全的应用。在这个压缩包中,包含了一个"跟我学shiro"的书籍和一个名为"shiro-example-master"的...

Global site tag (gtag.js) - Google Analytics