shiro---注解

@RequiresAuthentication

验证用户是否登录,等同于方法subject.isAuthenticated() 结果为true时。

@RequiresUser

验证用户是否被记忆,user有两种含义:

一种是成功登录的(subject.isAuthenticated() 结果为true);

另外一种是被记忆的(subject.isRemembered()结果为true)。

@RequiresGuest

验证是否是一个guest的请求,与@RequiresUser完全相反。

换言之,RequiresUser == !RequiresGuest。

此时subject.getPrincipal() 结果为null.

@RequiresRoles

例如:@RequiresRoles(“aRoleName”);

void someMethod();

如果subject中有aRoleName角色才可以访问方法someMethod。如果没有这个权限则会抛出异常AuthorizationException。

@RequiresPermissions

例如: @RequiresPermissions({“file:read”, “write:aFile.txt”} )
void someMethod();

要求subject中必须同时含有file:read和write:aFile.txt的权限才能执行方法someMethod()。否则抛出异常AuthorizationException。
Shiro的认证注解处理是有内定的处理顺序的,如果有个多个注解的话,前面的通过了会继续检查后面的,若不通过则直接返回,处理顺序依次为(与实际声明顺序无关):

RequiresRoles 
RequiresPermissions 
RequiresAuthentication 
RequiresUser 
RequiresGuest

例如:你同时声明了RequiresRoles和RequiresPermissions,那就要求拥有此角色的同时还得拥有相应的权限。

1) RequiresRoles

可以用在Controller或者方法上。可以多个roles,多个roles时默认逻辑为 AND也就是所有具备所有role才能访问。

//属于user角色
@RequiresRoles("user")//必须同时属于user和admin角色
@RequiresRoles({"user","admin"})//属于user或者admin之一;修改logical为OR 即可
@RequiresRoles(value={"user","admin"},logical=Logical.OR)
  1. RequiresPermissions
/符合index:hello权限要求
@RequiresPermissions("index:hello")//必须同时复核index:hello和index:world权限要求
@RequiresPermissions({"index:hello","index:world"})//符合index:hello或index:world权限要求即可
@RequiresPermissions(value={"index:hello","index:world"},logical=Logical.OR)
  1. RequiresAuthentication,RequiresUser,RequiresGuest

这三个的使用方法一样
既可以用在controller中,也可以用在service中
建议将shiro注解放入controller,因为如果service层使用了spring的事物注解,那么shiro注解将无效

@RequiresAuthenthentication:表示当前Subject已经通过login进行身份验证;即 Subjec.isAuthenticated()返回 true@RequiresUser:表示当前Subject已经身份验证或者通过记住我登录的,@RequiresGuest:表示当前Subject没有身份验证或者通过记住我登录过,即是游客身份@RequiresRoles(value = {"admin","user"},logical = Logical.AND):表示当前Subject需要角色admin和user@RequiresPermissions(value = {"user:delete","user:b"},logical = Logical.OR):表示当前Subject需要权限user:delete或者user:b

创建一个业务类
在这里插入图片描述
控制类中注入业务对象
在这里插入图片描述
在application.xm文件配置bean忽略

测试
在这里插入图片描述
用mike登录,在单击testAnnotation超链接就发生异常哦!
在这里插入图片描述
说明:没有这个权限哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Java核心技术(卷I)] - Java中的参数能做什么和不能做什么

1. 参考 - P123 ~ P126 2. 你将学到 Java中对方法参数能做什么和不能做什么 方法不能修改基本数据类型的参数(数值型或布尔型)方法可以改变对象参数的状态方法不能让一个对象参数引用一个新的对象 3. 代码证明 public class ParamTest {public static void main(String[] ar…

软件构造 第五章第一节 可复用性的度量、形态和外部观察

第五章第一节 可复用性的度量、形态和外部观察 面向复用编程(programming for reuse):开发出可复用的软件 基于复用编程(programming with reuse):利用已有的可复用软件搭建应用系统 代码复用的类型: 白盒复用:源代码可见&#x…

洛谷团队月赛题:题解

10pts10pts10pts 暴力算不解释,时间复杂度O(knk2)O(knk^2)O(knk2)。 30pts30pts30pts 我们观察到nnn很大,杨辉三角会T,直接算会上溢,所以需要预处理出111~kkk逆元再算,时间复杂度O(knnlogkn2)O(knnlogkn^2)O(knnlogkn2…

Angular Forms - 自定义 ngModel 绑定值的方式

在 Angular 应用中,我们有两种方式来实现表单绑定——“模板驱动表单”与“响应式表单”。这两种方式通常能够很好的处理大部分的情况,但是对于一些特殊的表单控件,例如input[typedatetime]、input[typefile],我们需要重写默认的表…

[web性能优化] - 使用在线工具对html、js、css进行压缩

参考 1. 学习点 使用 在线工具对html、css、js进行压缩学会分析压缩前后的效率提高点 2. 解决方案: 2.1 HTML压缩 在线压缩nodejs提供了 html-minifier工具(在构建层对代码进行压缩)后端模板引擎渲染压缩 2.2 CSS压缩 使用html-minifier对html中的css进行压缩使用clean-cs…

【LOJ】 #2540. 「PKUWC2018」随机算法

题解 感觉极其神奇的状压dp \(dp[i][S]\)表示答案为i,然后不可选的点集为S 我们每次往答案里加一个点,然后方案数是,设原来可以选的点数是y,新加入一个点后导致了除了新加的点之外x个点不能选,那么方案就是把x个数在y …

Shiro的authc过滤器的执行流程

1.先执行isAccessAllowed(),通过subject.isAuthenticated()判断当前session中的subject是否已经登陆过。如果在当前session即会话中已经登陆过,返回true,authc过滤器放行请求到loginUrl。 问题? 这里会有一个问题,如果我登陆成功…

SpringBoot之基础

简介 背景 J2EE笨重的开发 / 繁多的配置 / 低下的开发效率 / 复杂的部署流程 / 第三方技术集成难度大 特点 ① 快速创建独立运行的spring项目以及主流框架集成 ② 使用嵌入式的Servlet容器, 应用无需达成war包 ③ starters自动依赖和版本控制 ④ 大量自动配置, 简化开发, 也可修…

[Java核心技术(卷I)] - vscode手动编译运行继承类

参考 - P160~P161 主要有3个类: 一个测试类(ManagerTest)、一个子类(Manager)、一个父类(Employee) 注意点: -1. 使用 javac -d . *.java进行预编译 目录结构入下: 此时会生成目录结构如下: 之后运行 java com.inheritance.ManagerTest 附上几个类的代码 // com.inhe…

mysql常用语句和函数

mysql语句如果长期不写,就会忘掉,所以要时常复习,温故而知新。 1.select length("中国人"),select char_length("中国人"); 2建立数据库的语句 use new_schema;create table ta(id int primary key);这是小括号&#xff…

shiro框架@RequiresPermissions 解释

RequiresAuthentication 验证用户是否登录,等同于方法subject.isAuthenticated() 结果为true时。 RequiresUser 验证用户是否被记忆,user有两种含义: 一种是成功登录的(subject.isAuthenticated() 结果为true)&…

【Social Listening实战】当数据分析遭遇心理动力学:用户深层次的情感需求浮出水面...

本文转自知乎 作者:苏格兰折耳喵 ————————————————————————————————————————————————————— 本文篇幅较长,分为五部分,在中间部分有关于心理分析工具的介绍,案例分散在第二部…

Python 字符串切片

#-*- coding:utf-8 -*-#字符串切片names "abcdefgh"切片语法 names[起始位置:终止位置:步长] 起始位置:即字符串的下标,可以是正序下标(0,1,2...),也可以是逆序下标(-1,-2,-3...) 终止位置:也是字符串的下标,但是和起始位置下标不…

[Java核心技术(卷Ⅰ)] - 判断相等

参考 - P184 public boolean equals(Object otherObject) {// a quick test to see if the objects are identicalif (this otherObject) return true;// must return false if the explicit parameter is nullif (otherObject null) return null;// if the classes dont ma…

Oracle 11g DG主库节点2 ORA-00245: control file backup fail

--节点1报错 Sun Dec 09 08:29:57 2018Control file backup creation failed: failure to open backup target file /u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_zwdb.ctl.Errors in file /u01/app/oracle/diag/rdbms/zwdb/zwdb2/trace/zwdb2_arc0_167660.trc:ORA-27037: …

hive字符函数

转载于:https://www.cnblogs.com/ggzhangxiaochao/p/9222732.html

java动态编译

编译,一般来说就是将源代码转换成机器码的过程,比如在C语言中中,将C语言源代码编译成a.out,,但是在Java中的理解可能有点不同,编译指的是将java 源代码转换成class字节码的过程,而不是真正的机器码&#xf…

[c++] - 简单的冒泡

#include <iostream> using namespace std;int main() {// 利用冒泡排序实现升序序列int arr[9] {4, 2, 8, 0, 5, 7, 1, 3, 9};cout << "排序前: " << endl;for (int i 0; i < 9; i){cout << arr[i] << " ";}cout <…

Python爬虫之解析网页

常用的类库为lxml, BeautifulSoup, re(正则) 以获取豆瓣电影正在热映的电影名为例,urlhttps://movie.douban.com/cinema/nowplaying/beijing/ 网页分析 部分网页源码 <ul class"lists"><liid"3878007"class"list-item"data-title"…

腾讯企业邮箱报错 smtp.exmail.qq.comport 465, isSSL false

一、报错 "smtp.exmail.qq.com" port 465, isSSL false 通过网上搜索查询一些资料&#xff0c;推测是邮箱的配置出问题了。 二、修改邮箱配置 1 // 创建属性2 Properties props new Properties();3 props.setProperty("mail.transport.protocol", "s…