首先4个比较好的例子供参考:

1.常规Spring MVC拦截器实现的认证和权限管理例子

https://blog.csdn.net/u013647382/article/details/53995655

2.Shiro+SSM整合例子带数据库可成功访问

https://blog.csdn.net/zzhao114/article/details/55662585

3.Shiro权限管理框架详解(讲解的非常好)

https://www.cnblogs.com/jpfss/p/8352031.html

4. Shiro权限控制过程

http://itwgy.com/html/frame/159.html

先巩固一下session客户端实现的过程:

浏览器第一次访问某个javaee应用的地址时,发送的request的Cookie里是没有JSESSIONID的,

当response时会Set-Cookie设上一个web服务器对本次会话分配的JSESSIONID,

实际上HTTP协议是无状态的,每次请求都跟前一次没有什么关联,但只要你不是每次都重启浏览器来打开页面,

在同一个浏览器进程中不断的打开同一个应用的地址,浏览器都会附带上同样的cookie信息。

这样根据这个JSESSIONID web服务器就会把所有相同JSESSIONID连接识别成同一个会话。

所以说对于web应用来说即使没登录也有session,只不过session中没有存储登录信息。

因此注销时一定要清除session中的信息。注销后再登陆还是同一个JSESSIONID哦(先不管session过期的问题)。

常规Spring MVC拦截器实现的认证和权限管理的主要流程:

登录页面提交登录信息到控制器的登录处理方法,从数据库中根据用户名密码判断登录是否成功,

成功的话将用户信息和权限放到session中。

自定义的Spring MVC登录拦截器权限拦截器实际上就是从seesion中读取当前用户的登录和权限信息,进行对应的认证和权限匹配。

用户是否登录就判断当前会话session中是否存有用户信息对象,有就认为已登录。

权限就判断请求地址是否在权限列表中。

Shiro实现的认证和权限管理的主要流程:

未登录请求都转到配置的loginUrl上,

登录页面提交登录信息到控制器的登录处理方法,

调用SecurityUtils.getSubject().login(token),

转到自定义的MyRealm域中的doGetAuthenticationInfo方法进行认证。

成功的话将由shiro管理这次会话session控制了。不成功会抛出各种异常。

对权限控制调用MyRealm域中的doGetAuthorizationInfo获得当前用户的权限,

结合spring-shrio中的权限配置即可控制。

通过比较可以看出用shiro的好处:

无须再写自定义的SpringMVC登录拦截器和权限拦截器。

但是要在web.xml中配置shrio拦截器。

只要spring-shiro配置文件中配置好相关权限设置,

配合MyRealm中

doGetAuthenticationInfo登录验证

doGetAuthorizationInfo读取用户权限

即可同样实现。

简单的登录权限验证功能跟自己写拦截器差不多,要求有高级功能可以拓展,自己实现就复杂了,

重要的是别人都用了,不会就过时了。

============shiro配置学习================

参考例子:https://blog.csdn.net/ruihaol/article/details/52186318

<!-- 权限配置 -->
<property name="filterChainDefinitions">
<value>
<!-- anon表示此地址不需要任何权限即可访问 -->
/static/**=anon
<!-- perms[user:query]表示访问此连接需要权限为user:query的用户 -->
/user=perms[user:query]
<!-- roles[manager]表示访问此连接需要用户的角色为manager -->
/user/add=roles[manager]
/user/del/**=roles[admin]
/user/edit/**=roles[manager]
<!--所有的请求(除去配置的静态资源请求或请求地址为anon的请求)都要通过登录验证,如果未登录则跳到/login-->
/** = authc
</value>
</property>
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
//获取登录时输入的用户名
String loginName=(String) principalCollection.fromRealm(getName()).iterator().next();
//到数据库查是否有此对象
User user=userService.findByName(loginName);
if(user!=null){
//权限信息对象info,用来存放查出的用户的所有的角色(role)及权限(permission)
SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();
//用户的角色集合
info.setRoles(user.getRolesName()); // getRolesName()返回Set<String>,存放用户所属角色的集合,比如admin manager noraml,小系统就一个用户一个角色就行了,角色id作为用户的一个字段
//用户的角色对应的所有权限,如果只使用角色定义访问权限,下面的四行可以不要
List<Role> roleList=user.getRoleList();
for (Role role : roleList) {
info.addStringPermissions(role.getPermissionsName()); // 将角色拥有的权限字符串Set<String>集合给该用户,比如query add delele 等
}
return info;
}
return null;
}

可以看出通过shiro配置的filterChainDefinitions,可通过角色、权限(或称为资源)来共同控制,

小系统通过基于角色授权控制就行了(角色能干什么其实就是定义哪个角色能访问什么地址,可以通过自定义filter来讲配置转到数据库中)。

复杂的系统通过基于权限角色授权控制。

shiro学习总结的更多相关文章

  1. Shiro学习笔记(5)——web集成

    Web集成 shiro配置文件shiroini 界面 webxml最关键 Servlet 測试 基于 Basic 的拦截器身份验证 Web集成 大多数情况.web项目都会集成spring.shiro在 ...

  2. Shiro学习

    Shiro学习资源 Shiro官网,http://shiro.apache.org/index.html 学习网站链接,http://blog.java1234.com/blog/articles/4 ...

  3. Apache Shiro学习-2-Apache Shiro Web Support

     Apache Shiro Web Support  1. 配置 将 Shiro 整合到 Web 应用中的最简单方式是在 web.xml 的 Servlet ContextListener 和 Fil ...

  4. shiro学习笔记_0600_自定义realm实现授权

    博客shiro学习笔记_0400_自定义Realm实现身份认证 介绍了认证,这里介绍授权. 1,仅仅通过配置文件来指定权限不够灵活且不方便.在实际的应用中大多数情况下都是将用户信息,角色信息,权限信息 ...

  5. Apache shiro学习总结

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  6. Shiro学习笔记总结,附加" 身份认证 "源码案例(一)

    Shiro学习笔记总结 内容介绍: 一.Shiro介绍 二.subject认证主体 三.身份认证流程 四.Realm & JDBC reaml介绍 五.Shiro.ini配置介绍 六.源码案例 ...

  7. SpringBoot+Shiro学习(七):Filter过滤器管理

    SpringBoot+Shiro学习(七):Filter过滤器管理 Hiwayz 关注  0.5 2018.09.06 19:09* 字数 1070 阅读 5922评论 1喜欢 20 先从我们写的一个 ...

  8. Apache Shiro 学习记录5

    本来这篇文章是想写从Factory加载ini配置到生成securityManager的过程的....但是貌似涉及的东西有点多...我学的又比较慢...很多类都来不及研究,我又怕等我后面的研究了前面的都 ...

  9. Apache Shiro 学习记录4

    今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...

  10. Apache Shiro 学习记录1

    最近几天在学习Apache Shiro......看了一些大神们的教程.....感觉收获不少.....但是毕竟教程也只是指引一下方向....即使是精品教程,仍然有很多东西都没有说明....所以自己也稍 ...

随机推荐

  1. 60cms Cookies欺骗漏洞审计

    源码地址:https://files.cnblogs.com/files/ssooking/60cms.zip 运行60cms目录下的Netbox.exe即可开启Asp Web服务,默认端口80 环境 ...

  2. 用反卷积(Deconvnet)可视化理解卷积神经网络还有使用tensorboard

    『cs231n』卷积神经网络的可视化与进一步理解 深度学习小白——卷积神经网络可视化(二) TensorBoard--TensorFlow可视化 原文地址:http://blog.csdn.net/h ...

  3. Attacks for RL

    1. http://rll.berkeley.edu/adversarial/   Adversarial Attacks on Neural Network Policies 就是对test时候的p ...

  4. Golang查缺补漏(一)

    Go语言高级编程(Advanced Go Programming) Go语言高级编程(Advanced Go Programming) golang都是传值,与其他语言不同的是数组作为参数时,也是传值 ...

  5. docker 的使用

    docker 学习 1. Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序. 输出Hello world docker run ubuntu:15 ...

  6. Parquet格式解析

    parquet是列式存储格式,官方文档 https://parquet.apache.org/documentation/latest/ 一个Parquet文件是由一个header以及一个或多个blo ...

  7. Maven项目错误解决小结

    http://blog.csdn.net/typa01_kk/article/details/49185759 Maven项目错误解决小结 注:整理错误,不喜欢为了一个小问题,占篇幅,所以请Ctrl+ ...

  8. 目前我对ReactNative的了解

    1.什么是React? 一个js组件库,不同于angular的是一个完整的framework,React需要像jQuery一样写事件监听逻辑,最大特点是Virtual DOM. 官网:https:// ...

  9. [2]朝花夕拾-JAVA注解、PHP注解?

    一.Java注解概述 注解,也被称为元数据,为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后某个时刻非常方便地使用这些数据. 注解在一定程度上是把元数据与源代码文件结合在一起,而不是保存 ...

  10. docker应用-3(搭建hadoop以及hbase集群)

    要用docker搭建集群,首先需要构造集群所需的docker镜像.构建镜像的一种方式是,利用一个已有的镜像比如简单的linux系统,运行一个容器,在容器中手动的安装集群所需要的软件并进行配置,然后co ...