Shiro 教程基于SSM(SpringMVC + Spring + Mybatis)EHCache版本

一、Shiro简介

Apache Shiro 是 Java  的一个安全框架。我们经常看到它被拿来和 Spring  Security  来对比。大部分人认为 Shiro  Security  要简单。我的观点赞成一半一半吧。

首先 Shiro  确实和 Security  是同类型的框架,主要用来做安全,也就是我们俗称的权限校验(控制)。居多人对 Shrio  的定义为好入门。

我选型为 Shiro  ,主要的原因扩展太easy了,而且我要的功能它都有。

二、概述

前段时间出了一个基于SSM(SpringMVC + Spring + Mybatis)的Shiro 教程Demo,Cache(Nosql)是基于Ehcache的,但是很多同学卡在了Redis上,经常运行起来。所以现在出一版本基于  Cache  为Ehcache版本的。这样减少新入门的同学的难度,不用依赖第三方中间件。

后续会陆陆续续添加N多相关的功能。以不同版本的方式发布。

基于Redis版本地址:http://www.sojson.com/shiro

三、需要你的赞助

如果帮助到了您,请你在下载代码后,运行后,跑起来后,加群帮你解决问题后,兴奋、喜悦、愤怒、丧气、不知所措... ... 的时候,请赞助我,钱多少不重要,学生请不要赞助(富二代请忽略)。

赞助链接:http://www.sojson.com/subsidize.html

四、请遵循三要素

  1. 建议你看完本篇文档所有内容,再进行运行项目。
  2. 在没熟练之前,除了必要的配置修改,请勿改动任何配置和包路径。
  3. 有疑问先看文档,交流群:259217951即可,群里没人理你@群主即可。

五、环境准备

5.1 开发工具

  Eclipse  、  MyEclipes  、Idea等  Java  开发工具,推荐使用MyEclipes8.5以上。因为这个项目是在MyEclipes8.5MyEclipes10.7开发的。

如果使用Eclipse的同学,请安装好Maven环境,如果没有Maven环境,又不想安装,那么请在附件中下载依赖包,自己把项目转成Java Web项目然后进行运行。

如果使用Idea作为开发工具的同学,注意配置resources,还有一些其他的配置需要自己处理,不像导入  MyEclipes  直接能跑起来。

5.2 依赖第三方

因为是基于  Ehcache  ,所以也没有其他第三方。

主要就是一个  Mysql  数据库。数据库的版本为 Mysql5.6  ,估计Mysql5.5Mysql5.6都没问题,Mysql5.7有小小问题,因为一些默认配置导致有些语法可能不支持,这个慎用。

下面有最新,我测试可用的Mysql安装教程:Mysql5.6下载安装,Mysql5.7下载安装 ,Windows64位,绿色安装(解压缩安装)图文安装教程

如果安装出现Mysql权限问题:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 解决。

六、环境配置及要求,JDK版本,初始化配置

6.1 JDK版本要求

  JDK  版本要求为JDK1.7+,我开发的版本是1.7.0_80JDK1.6有些jar包会报错,推荐使用JDK1.7以上。

如果出现以下类似错误,那就是JDK版本不相符。

 
  1. Unsupported major.minor version 51.0

其中各个版本对应的提示如下:

 
  1. JDK1.5对应为Unsupported major.minor version 49.0
  2. JDK1.6对应为Unsupported major.minor version 50.0
  3. JDK1.7对应为Unsupported major.minor version 51.0
  4. JDK1.8对应为Unsupported major.minor version 52.0

6.2 初始化配置

6.2.1 Mysql数据库初始化

本教程不支持自动创建表和插入数据,在项目的init/sql下有三个sql 文件,分别为:tables.sql(插入表)、init.data.sql(插入初始化数据)、init_shiro_demo.sql(插入初始化存储过程)。

执行的过程为: tables.sql(插入表)===> init.data.sql(插入初始化数据)就可以了。

存储过程可以是定时任务 com.sojson.common.timer.ToTimer 中定时任务调用的存储过程。每20分钟一次。想看看效果的同学,可以把spring.xml配置文件中的spring-timer.xml注释打开就可以。

数据库配置:jdbc.properties配置你的数据库链接。

 
  1. jdbc.url=jdbc:mysql://localhost:3306/shiro.demo
  2. jdbc.username=root
  3. jdbc.password=123456

具体 druid 配置:Druid数据库配置详细介绍

其他配置默认的即可,先跑起来,跑起来没问题后,看看配置文件,有问题和疑问在群里交流。

PS:如果你确实要用Mysql5.7,那么在Mysql的安装目录下找到。my.ini或者my_default.ini里面配置sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES即可。

6.3 Maven环境说明

本教程是用  Maven  管理Jar包及运行打包,如果你发现  Maven  一直在下载jar包,时间过久的话,建议你换成阿里的数据源。打开你的  Maven  目录的setting.xml文件,如果没有直接添加即可,官方群里有setting.xml文件作为参考。

主要改个本地Maven目录,改成你自己的目录即可:

 
  1. <localRepository>E:\maven\repository</localRepository>

再配置一个mirror,找到标签为mirrors,然后在里面添加或者修改为阿里的Maven库,如下图:

 
  1. <mirrors>
  2. <mirror>
  3. <id>alimaven</id>
  4. <name>aliyun maven</name>
  5. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  6. <mirrorOf>central</mirrorOf>
  7. </mirror>
  8. </mirrors>

Maven的Mirror和Repository 的详细讲解 ,可以详细了解下。

异常解决

常见的异常有3种。

  1. 如果有部分包打红× ,可以删除这个包路径,再次项目右键 Maven选项(每个工具不一样)==> Update Maven Dependencies 更新即可。
  2. 如果下载好Jar包,也不报错,但是在运行项目的时候,报错zip相关异常,那么删除Maven目录下所有下好的jar包,然后再来下载一次。因为是下载的包是损坏的。
  3. 还有   Maven  的  JDK  版本需要和你项目一致,有的工具默认配置是JDK1.5

6.4 其他说明

编码格式:UTF-8,换成其他编码格式可能会有瑕疵。

Spring相关Jar版本为:Spring 4.2.5

前端页面采用:Bootstarp 3.2 

其他依赖:jQuery1.8.3   、layer控件。

6.5 View层说明

http://www.sojson.com/shiro之前的Shiro Demo 是  JSP  和  Freemarker  混合模版,从这个Shiro Demo开始,我只用  Freemarker  ,后期也会出  Freemarker  视频教程。当然为了习惯(只会)JSP的同学,我也双模版配置不修改,您想改成JSP可以直接支持,JSP是以WEB-INF下的view目录为根目录。

七、教程功能详细说明

下面各点是针对(SSM)SpringMvc + Spring + Mybatis框架说明,以及一些使用方式和基本功能介绍。

7.1.1 框架基本介绍

本教程是SSM(  SpringMVC  +Spring  +   Mybatis  +   Freemarker  )  +   Ehcache  做的整体Shiro Demo,其他框架需要自己自行解决,所以不做框架 其他 的讲解,其实是大同小异。

7.1.2 分页介绍

本框架里的分页比较Low,分页的ServiceImpl要继承 BaseMybatisDao<T>  ,这里泛型的<T>为当前实体对象对应的Mapper.xml文件,其实就是Mapper.xmlnamespace。调用父类的findPage相关。

Service Impl Java 代码:

 
  1. publicPagination<UserRoleAllocationBo> findUserAndRole(ModelMap modelMap,
  2. Integer pageNo,Integer pageSize){
  3. //findUserAndRole : 为查询数据(sqlID)
  4. //findCount : 为查询符合数据的总条数(sqlID)
  5. returnsuper.findPage("findUserAndRole","findCount", modelMap, pageNo, pageSize);
  6. }

分页查询使用缺省的sqlId

 
  1. publicPagination<UPermission> findPage(Map<String,Object> resultMap,Integer pageNo,
  2. Integer pageSize){
  3. /**
  4. * 调用父类的分页查询,默认数据查询sqlId = findAll , count 查询sqlId = findCount
  5. */
  6. returnsuper.findPage(resultMap, pageNo, pageSize);
  7. }

Mapper.xml 文件 Sql 代码,和上面一 一对应:

 
  1. <selectid="findCount"resultMap="BaseResultMap">
  2. select count(id) from u_user
  3. <includerefid="where_all"/>
  4. </select>
  5. <!-- 用户权限分配的分页查询 -->
  6. <selectid="findUserAndRole"resultType="com.sojson.permission.bo.UserRoleAllocationBo">
  7. select u.id,u.nickname,u.email,u.create_time,u.last_login_time,u.status ,group_concat(ur.name) roleNames,group_concat(ur.id)roleIds from
  8. u_user u
  9. left join u_user_role uur on uur.uid = u.id
  10. left join u_role ur on ur.id = uur.rid
  11. <where>
  12. <iftest="findContent != null and findContent !='' ">
  13. and (
  14. LOWER(u.nickname) like LOWER(CONCAT("%",#{findContent,jdbcType=VARCHAR},"%")) or
  15. LOWER(u.email) like LOWER(CONCAT("%",#{findContent,jdbcType=VARCHAR},"%"))
  16. )
  17. </if>
  18. </where>
  19. group by u.id
  20. </select>
 
  1. <selectid="findAll"resultMap="BaseResultMap">
  2. select
  3. <includerefid="Base_Column_List"/>
  4. from u_permission
  5. <includerefid="where_all"/>
  6. <includerefid="limit_sql"/>
  7. </select>
  8. <selectid="findCount"resultMap="BaseResultMap">
  9. select count(id) from u_permission
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值