Shiro 教程,Shiro教程0.2 下载,Shiro功能修复与升级说明。

soゝso 2017-03-23 13:39:31 19018
分享到:

shiro demo下载

Shiro + SSM(框架) + Freemarker(jsp)讲解的权限控制Demo,还不赶快去下载?




前言:本教程适合有一定基础的 Java程序员使用,如果对 Shiro 有一定的了解,过程中会很快接受,建议在使用 Shiro教程Demo的时候,建议直接Maven,教程Demo中没有对Maven过多的依赖,只有一个依赖包的管理,如果对Maven不熟悉,你可以 安装一个MyEclipse8.5,自带Maven环境,本站有 在线生成MyEclipse注册码。注意,开始不管你技术多牛,不管我的文档写的有多么不好,都建议你看完,这样大概心里有个数,Demo里有什么功能, 哪些地方怎么实现的?都知道个大概。

主要解决是之前说的问题:Shiro 教程,关于最近反应的相关异常问题,解决方法合集。

项目在本页面的附件中提取。

一、Cache配置修改。

配置文件(spring-cache.xml )中已经修改为如下配置:

<!-- redis 配置,也可以把配置挪到properties配置文件中,再读取 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
	<constructor-arg index="0" ref="jedisPoolConfig" />
    <constructor-arg index="2" value="6379"  name="port" type="int"/>
    <constructor-arg index="3" value="5000"  name="timeout" type="int"/>
    <constructor-arg index="1" value="127.0.0.1" name="host" type="java.lang.String"/>
</bean>
<!-- 
	这种 arguments 构造的方式,之前配置有缺点。
	这里之前的配置有问题,因为参数类型不一致,有时候jar和环境的问题,导致参数根据index对应,会处理问题,
	理论上加另一个 name,就可以解决,现在把name 和type都加上,更保险。
 -->

二、登录获取上一个URL地址报错。

当没有获取到退出前的request ,为null 的时候会报错。在(UserLoginController.java  )135行处有所修改。

/**
 * shiro 获取登录之前的地址
 * 之前0.1版本这个没判断空。
 */
SavedRequest savedRequest = WebUtils.getSavedRequest(request);
String url = null ;
if(null != savedRequest){
	url = savedRequest.getRequestUrl();
}
/**
 * 我们平常用的获取上一个请求的方式,在Session不一致的情况下是获取不到的
 * String url = (String) request.getAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE);
 */

三、删除了配置文件中的cookie写入域的问题。

在配置文件里(spring-shiro.xml )中的配置有所修改。

<!-- 会话Cookie模板 -->
<bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
	<!--cookie的name,我故意取名叫xxxxbaidu -->
    <constructor-arg value="v_v-s-baidu"/>
    <property name="httpOnly" value="true"/>
    <!--cookie的有效时间 -->
    <property name="maxAge" value="-1"/>
    <!-- 配置存储Session Cookie的domain为 一级域名
    <property name="domain" value=".itboy.net"/>
     -->
</bean>

上面配置是去掉了 Session  的存储Key 的作用域,之前设置的.itboy.net  ,是写到当前域名的 一级域名  下,这样就可以做到N 二级域名  下,三级、四级....下 Session  都是共享的。

<!-- 用户信息记住我功能的相关配置 -->
<bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
    <constructor-arg value="v_v-re-baidu"/>
    <property name="httpOnly" value="true"/>
    <!-- 配置存储rememberMe Cookie的domain为 一级域名
    <property name="domain" value=".itboy.net"/>
     -->
    <property name="maxAge" value="2592000"/><!-- 30天时间,记住我30天 -->
</bean>

记住我登录的信息配置。和上面配置是一样的道理,可以在相同 一级域名  下的所有域名都可以获取到登录的信息。

四、简单实现了单个帐号只能在一处登录。

我们在其他的系统中可以看到,单个帐号只允许一人使用,在A处登录了,B处再登录,那A处就被踢出了。如下图所示。

PS:这个功能有点问题,以后有时间我再修复,请把shiro_base_auth.ini 文件中的 kickout 去掉即可(2016年9月6日 09:31:47)。

但是此功能不是很完美,当A处被踢出后,再重新登录,这时候B处反应有点慢,具体我还没看,因为是之前加的功能,现在凌晨了,下次我有空再瞧瞧,同学你也可以看看,解决了和我说一声,我把功能修复。

五、修复功能(BUG)

1.修复权限添加功能BUG。

之前功能有问题,每当添加一个权限的时候,默认都给角色为“管理员”的角色默认添加当前新添加的权限。这样达到管理员的权限永远是最大的。由于代码有BUG ,导致所有权限删除了。现已修复。

2.修复项目只能部署到Root目录下的问题。

问题描述:之前项目只能部署到Root 下才能正常运行,目前已经修复,可以带项目路径进行访问了,之前只能这样访问,http://localhost:8080  而不能http://localhost:8080/shiro.demo/ 访问,目前是可以了。

解决方案:在 FreeMarkerViewExtend.java 33行处 增加了BasePath ,通过BasePath 来控制请求目录,在 Freemarker  中可以自由使用,而 JSP  中是直接在 JSP  中获取BasePath 使用。

解决后遗症:因为我们的权限是通过URL 来控制的,那么增加了项目的目录,导致权限不能正确的判断,再加上我们的项目名称(目录)可以自定义,导致更不好判断。

后遗症解决方案:PermissionFilter.java 50行处 解决了这个问题,详情请看代码和注释,其实就是replace 了一下。

HttpServletRequest httpRequest = ((HttpServletRequest)request);
/**
 * 此处是改版后,为了兼容项目不需要部署到root下,也可以正常运行,但是权限没设置目前必须到root 的URI,
 * 原因:如果你把这个项目叫 ShiroDemo,那么路径就是 /ShiroDemo/xxxx.shtml ,那另外一个人使用,又叫Shiro_Demo,那么就要这么控制/Shiro_Demo/xxxx.shtml 
 * 理解了吗?
 * 所以这里替换了一下,使用根目录开始的URI
 */

String uri = httpRequest.getRequestURI();//获取URI
String basePath = httpRequest.getContextPath();//获取basePath
if(null != uri && uri.startsWith(basePath)){
	uri = uri.replace(basePath, "");
}

3.项目启动的时候报错,关于JNDI的错误提示。

其实也不是错,但是看着不舒服,所以还得解决这个问题。解决这个问题需要在web.xml 中的开始部位加入以下代码。

<context-param>
	<param-name>spring.profiles.active</param-name>
	<param-value>dev</param-value>
</context-param>
<context-param>
	<param-name>spring.profiles.default</param-name>
	<param-value>dev</param-value>
</context-param>
<context-param>
	<param-name>spring.liveBeansView.mbeanDomain</param-name>
	<param-value>dev</param-value>
</context-param>

4.项目Maven打包问题。

打包的时候,不同版本的 Eclipse  还有IDEA 会有打包打不进去Mapper.xml 文件,这个时候要加如下代码(群里同学提供的)。

<resources>
	<resource>
		<directory>src/main/java</directory>
		<includes>
			<include>**/*.properties</include>
			<include>**/*.xml</include>
		</includes>
		<filtering>false</filtering>
	</resource>
</resources>

<build> 标签内加入即可,如果还是不能解决,那么请你加群(改名后)说明你的问题,有人会回答你。

5.Tomcat7以上在访问JSP页面的时候,提示JSTL错误。

这个错误是因为Tomcat7 中没有 JSTL  的jar包,现在已经在项目pom.xml 中增加了如下 jar  的引入管理。

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jstl</artifactId>
	<version>1.2</version>
</dependency>
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jsp-api</artifactId>
	<version>2.0</version>
	<scope>provided</scope>
</dependency>

如果还是不能解决问题,请在官方群(群号:259217951)内搜索“jstl” 如图下载依赖包。

即可解决问题。

大概就这些问题。新的项目在附件中下载,已经提交到github 。具体请看 http://www.sojson.com/shiro

新的问题:

ps:我的疏忽,把http://shiro.itboy.net 线上展示的Demo 定时任务+存储过程提交到github和下载的项目中。错误如下:

 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: PROCEDURE shiro_demo.init_shiro_demo does not exist

解决方案,在Spring.xml里把定时任务注释(删除)了。


项目详细介绍请看这里:http://www.sojson.com/shiro

Github下载:https://github.com/baichengzhou/SpringMVC-Mybatis-Shiro-redis-0.2

关于作者
目前就职于国内某电商平台公司打杂。。
相关文章
Shiro教程(五)Shiro + Redis实现
Shiro教程(四)Shiro + Redis配置
Shiro教程(十)Shiro 权限动态加与配置精细讲解
Shiro教程(九)Shiro JSP标签的使用。
Shiro教程(八)Shiro Freemarker标签的使用。
Shiro教程(六)Shiro整体的配置文件
Shiro教程(一)Shiro 是什么?Shiro的简单介绍。
Shiro教程Shiro 配置文件详细解释,Shiro自定义Filter配置
Shiro教程(二)Maven管理Shrio Jar包
Shiro教程(七)Shiro Session共享配置以及实现
最新文章
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 39212
SOJSON 使用又拍云 CDN 整体架构,解决百度 SEO 方案 33
又拍云(Upyun)刷新CDN,云存储缓存 —JavaAPI 20
JS解密,JavaScript 解密,任何JS加密都能100%解密,以及JS 加密讲解 87
阿里云DNS 解析讲解,SEO配置搜索引擎线路解析 45
百度秒收录教程,怎么做到百度秒收入你的页面,SEO 教程 102
CDN 请求返回 connection reset by peer,被拦截请求解决方案 37
Google AdSense 申请技巧,谷歌广告申请通不过教程 75
Mac 安装 JMeter,JMeter 下载,JMeter Http 压力测试【图解】 51
Java 随机从 List 随机获取多个不重复对象,Mysql 随机10条数据 75
最热文章
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 39214
Elasticsearch教程(四) elasticsearch head 插件安装和使用 109192
Elasticsearch教程(六) elasticsearch Client创建 73333
Elasticsearch教程(八) elasticsearch delete 删除数据(Java) 70770
Elasticsearch教程(二),IK分词器安装 67527
Elasticsearch教程(三),IK分词器安装 (极速版) 54098
Elasticsearch教程(五) elasticsearch Mapping的创建 51659
Elasticsearch教程(一),全程直播(小白级别) 51448
Elasticsearch教程(七) elasticsearch Insert 插入数据(Java) 47798
Elasticsearch权威指南-中文.pdf,Elasticsearch 中文文档下载 40972

骚码加入我们 / 千人QQ群:259217951

入群需要5元,如果没有QQ钱包,可以先Alipay、微信,赞助然后加群主拉进。

二维码生成 来自 >> 二维码生成器

支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

正在加载... ...