说实话开学第一周效率并不高。项目该结的都差不多结了,看来这毛病我是养成了。项目忙的要死的时候,想休息想停一停就不断往下扔包袱。一下没项目了开学了,反倒开始手痒,捉摸着写点什么代码。马上我的小mac就要送去维修了,我这寂寞可能会难耐。

  还是整理总结一下shiro吧,要不这周光学个这可就白学了。

  shiro我觉得很简单,简单易上手的框架,不仅对授权与权限的控制简单,对细粒度的权限也很方便。

  重要的两个方法一个是doGetAuthorizationInfo和doGetAuthenticationInfo,一个是授权一个是认证,确实很像。

  Authentication n.证明、鉴定、证实。  Authorization n.授权、认可、委任。(记住方法,正常流程先认证再授权,它俩Auth之后的e和o,e在前e就是认证,o就是授权)。

  Principals(身份):是Subject 的‘identifying attributes(标识属性)’。比如我们登录提交的用户名。

  Credentials(凭证):通常是只被Subject 知道的秘密值,它用来作为一种起支持作用的证据,此证据事实上包含着所谓的身份证明。比如我们登录提供的密码。

  

  搭框架,正常套路。

  1、放jar或配maven,配置shiroFilter在web.xml。

  2、spring整合配置

<!-- 配置自定义Realm -->
<bean id="myRealm" class="com.crossoverJie.shiro.MyRealm"/> <!-- 安全管理器 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="myRealm"/>
</bean> <!-- Shiro过滤器 核心-->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- Shiro的核心安全接口,这个属性是必须的 -->
<property name="securityManager" ref="securityManager"/>
<!-- 身份认证失败,则跳转到登录页面的配置 -->
<property name="loginUrl" value="/login.jsp"/>
<!-- 权限认证失败,则跳转到指定页面 -->
<property name="unauthorizedUrl" value="/nopower.jsp"/>
<!-- Shiro连接约束配置,即过滤链的定义 -->
<property name="filterChainDefinitions">
<value>
<!--anon 表示匿名访问,不需要认证以及授权-->
/loginAdmin=anon <!--authc表示需要认证 没有进行身份认证是不能进行访问的-->
/admin*=authc /student=roles[teacher]
/teacher=perms["user:create"]
</value>
</property>
</bean> <!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> <!-- 开启Shiro注解 -->
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
depends-on="lifecycleBeanPostProcessor"/>
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager"/>
</bean>

  3、去搞个realm,最终处理都将交给Real进行处理。继承AuthorizingRealm类,复写上面提到的两个Auth方法。

  这时会调用Realm的getAuthenticationInfo(token)方法。 
      该方法主要执行以下操作: 
  1、检查提交的进行认证的令牌信息 
  2、根据令牌信息从数据源(通常为数据库)中获取用户信息 
  3、对用户信息进行匹配验证。 
  4、验证通过将返回一个封装了用户信息的AuthenticationInfo实例。 
  5、验证失败则抛出AuthenticationException异常信息。

  

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {
UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
User user = accountManager.findUserByUserName(token.getUsername());
if (user != null) {
return new SimpleAuthenticationInfo(user.getUserName(), user.getPassword(), getName());
} else {
return null;
}
}
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
String userName = (String) principals.fromRealm(getName()).iterator().next();
User user = accountManager.findUserByUserName(userName);
if (user != null) {
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
for (Group group : user.getGroupList()) {
info.addStringPermissions(group.getPermissionList());
}
return info;
} else {
return null;
}
}  

Shiro提供的注解

@RequiresAuthentication :要求当前 Subject 已经在当前的session 中被验证通过才能被注解的类/实例/方法访问或调用。

@RequiresGuest :要求当前的 Subject 是一个 “guest”,也就是他们必须是在之前的 session 中没有被验证或记住才能被注解的类/实例/方法访问或调用。

@RequiresPermissions:要求当前的 Subject 被允许一个或多个权限,以便执行注解的方法,比如:@RequiresPermissions("account:create") @RequiresRoles:要求当前的 Subject 拥有所有指定的角色。如果他们没有,则该方法将不会被执行,而且 AuthorizationException 异常将会被抛出。比如:@RequiresRoles("administrator")

@RequiresUser:需要当前的Subject 是一个应用程序用户才能被注解的类/实例/方法访问或调用。要么是通过验证被确认,或者在之前session 中的 'RememberMe‘ 服务被记住。

  心声 〔奥〕 里尔克
遮住我的双眼,我依然能看见你。
捂住我的双耳,我依然能听见你。
没有了双脚,我依然能走向你。
没有了双唇,我依然能呼唤你。
折断我的手臂,我依然能用我的心代替双手拥抱你的影子。
摘去我的心脏,我的大脑依然在跳动。
即使我的大脑被烧毁,
我依然能用全身的血液托浮起你。

  

  晚安 ,futureGirl 看着你,所以加油。

我在看着你呢——shiro学习的更多相关文章

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

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

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

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

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

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

  4. Shiro学习

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

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

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

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

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

  7. Apache shiro学习总结

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

  8. CVPR2018论文看点:基于度量学习分类与少镜头目标检测

    CVPR2018论文看点:基于度量学习分类与少镜头目标检测 简介 本文链接地址:https://arxiv.org/pdf/1806.04728.pdf 距离度量学习(DML)已成功地应用于目标分类, ...

  9. Apache Shiro 学习记录5

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

随机推荐

  1. 洛谷 P3924 康娜的线段树

    P3924 康娜的线段树 题目描述 小林是个程序媛,不可避免地康娜对这种人类的“魔法”产生了浓厚的兴趣,于是小林开始教她OI. 今天康娜学习了一种叫做线段树的神奇魔法,这种魔法可以维护一段区间的信息, ...

  2. CI框架源代码阅读笔记2 一切的入口 index.php

    上一节(CI框架源代码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程.这里再次贴出流程图.以备參考: 作为CI框架的入口文件.源代码阅读,自然由此開始. 在源代码阅读的 ...

  3. UVALive 6084 Happy Camper(数学题)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  4. spfile

    1 让ORACLE自己主动从spfile启动  SQL> create spfile='/dev/vx/rdsk/vgora/lv_spfile' from pfile;  SQL> sh ...

  5. UVA10491 - Cows and Cars(概率)

    UVA10491 - Cows and Cars(概率) 题目链接 题目大意:给你n个门后面藏着牛.m个门后面藏着车,然后再给你k个提示.在你作出选择后告诉你有多少个门后面是有牛的,如今问你作出决定后 ...

  6. vim 插件之NERD tree

    NERD tree 这个插件可以用来快速浏览目录结构,打开文件 地址 http://www.vim.org/scripts/script.php?script_id=1658 https://gith ...

  7. 安卓开发--scrollview

    package com.cnn.scrollviewdemo01; import android.R.integer; import android.annotation.SuppressLint; ...

  8. 继承—people

    public class People { private double height;//身高 private double weight;//体重 public double getHeight( ...

  9. Java Web应用定制404错误页面

    Http响应状态码404的含义是服务器端没有找到客户端请求的资源,定制404错误页面至少有以下两个好处: 1.向客户端隐藏服务器信息,服务器提供的默认404错误页面上一般都包含当前应用使用的是什么服务 ...

  10. JS动态创建表单post提交

    <script> //@创建表单方法 function post(URL, PARAMS) { var temp = document.createElement("form&q ...