shiro 基本知识测试

<!--shiro核心包-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

AuhtorizationTest

package com.mozq.shiro.shiro01;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.SimpleAccount;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.SimpleAccountRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.Subject;
import org.junit.Test; public class AuhtorizationTest { @Test
public void testAuhtorization(){
//创建权限管理器,给定Realm提供认证和授权信息
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm();
simpleAccountRealm.addAccount("liubei", "123","砂场老板","砂场负责人"); defaultSecurityManager.setRealm(simpleAccountRealm);
SecurityUtils.setSecurityManager(defaultSecurityManager); //获取主体
Subject subject = SecurityUtils.getSubject(); //登录
subject.login(new UsernamePasswordToken("liubei", "123")); //检查权限
subject.checkRoles("砂场老板1");
// subject.checkRoles("砂场老板","砂场负责人");
}
}

AuthenticationTest

package com.mozq.shiro.shiro01;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.SimpleAccountRealm;
import org.apache.shiro.subject.Subject;
import org.junit.Test; public class AuthenticationTest { @Test
public void AuthenticationTest(){
//创建权限管理器,给定Realm提供认证和授权信息
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm();
simpleAccountRealm.addAccount("liubei", "123");
simpleAccountRealm.addAccount("sunquan", "123"); defaultSecurityManager.setRealm(simpleAccountRealm);
SecurityUtils.setSecurityManager(defaultSecurityManager); //获取主体
Subject subject = SecurityUtils.getSubject(); //登录
subject.login(new UsernamePasswordToken("liubei", "123"));
subject.login(new UsernamePasswordToken("sunquan", "123")); System.out.println("subject.isAuthenticated():" + subject.isAuthenticated());
//退出
subject.logout();
System.out.println("subject.isAuthenticated():" + subject.isAuthenticated()); }
}

IniRealmTest

package com.mozq.shiro.shiro01;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.text.IniRealm;
import org.apache.shiro.subject.Subject;
import org.junit.Test; public class IniRealmTest { @Test
public void testIniRealm(){
//创建权限管理器,给定Realm提供认证和授权信息
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
IniRealm iniRealm = new IniRealm("classpath:user.ini");
defaultSecurityManager.setRealm(iniRealm);
SecurityUtils.setSecurityManager(defaultSecurityManager); //获取主体
Subject subject = SecurityUtils.getSubject(); //认证
subject.login(new UsernamePasswordToken("刘备", "123"));
System.out.println("subject.isAuthenticated():" + subject.isAuthenticated());
//授权
subject.checkRoles("砂场老板");
subject.checkRoles("砂场老板", "砂场负责人");
} }
# user.ini
[users]
刘备=123,砂场老板
sunquan=234,砂场负责人
[roles]
砂场老板=customer:select,order:select

JdbcRealmTest

package com.mozq.shiro.shiro01;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.jdbc.JdbcRealm;
import org.apache.shiro.subject.Subject;
import org.junit.Before;
import org.junit.Test; public class JdbcRealmTest { private DruidDataSource dataSource = new DruidDataSource(); @Before
public void setDataSource(){
dataSource.setUrl("jdbc:mysql:///perms");
dataSource.setUsername("root");
dataSource.setPassword("root");
} @Test
public void testJdbcRealm(){
//创建权限管理器,给定Realm提供认证和授权信息
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
JdbcRealm jdbcRealm = new JdbcRealm();
jdbcRealm.setDataSource(dataSource);
jdbcRealm.setPermissionsLookupEnabled(true);//开启权限查询,默认不会开启
//参数用户名,结果用户密码
jdbcRealm.setAuthenticationQuery("select password from user where username=?");
//参数用户名,结果角色名称
jdbcRealm.setUserRolesQuery(
"select R.role_name\n" +
"from role R\n" +
"left join user_role UR\n" +
"on R.id=UR.role_id\n" +
"left join user U\n" +
"on UR.user_id=U.id\n" +
"where U.username=?"
);
//参数角色名称,结果权限名称
jdbcRealm.setPermissionsQuery(
"select P.permission_name\n" +
"from permission P\n" +
"left join role_permission RP\n" +
"on RP.permission_id=P.id\n" +
"left join role R\n" +
"on RP.role_id=R.id\n" +
"where R.role_name=?"
);
defaultSecurityManager.setRealm(jdbcRealm); SecurityUtils.setSecurityManager(defaultSecurityManager); //获取主体
Subject subject = SecurityUtils.getSubject(); //认证
subject.login(new UsernamePasswordToken("刘备", "123"));
System.out.println("subject.isAuthenticated():" + subject.isAuthenticated());
//授权
subject.checkRoles("砂场老板");
// subject.checkRoles("砂场老板", "砂场负责人"); subject.checkPermission("customer:select");
} }

CustomRealm

package com.mozq.shiro.shiro01;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection; import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set; public class CustomRealm extends AuthorizingRealm { private Map<String, String> users = new HashMap<>();
{
users.put("刘备","123");
users.put("孙权","123");
}
private String getPasswordByUsername(String username){
return users.get(username);
}
private Set<String> getRolesByUsername(String username){
Set<String> roles = new HashSet<>();
if("刘备".equals(username)){
roles.add("砂场老板");
return roles;
}
return roles;
}
private Set<String> getPermsByUsername(String username){
Set<String> perms = new HashSet<>();
if("刘备".equals(username)){
perms.add("user:add");
perms.add("user:delete");
return perms;
}
return perms;
} @Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
String username = (String) principals.getPrimaryPrincipal();
Set<String> roles = getRolesByUsername(username);
Set<String> perms = getPermsByUsername(username); SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
simpleAuthorizationInfo.addRoles(roles);
simpleAuthorizationInfo.addStringPermissions(perms);
return simpleAuthorizationInfo;
} @Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String username = String.valueOf(token.getPrincipal());
String password = String.valueOf((char[]) token.getCredentials());
System.out.println(username + ":" + password); String rightPassword = getPasswordByUsername(username);
if(rightPassword != null && rightPassword.equals(password)){
return new SimpleAuthenticationInfo(username, password, "customRealm");
}
return null;
} }

CustomRealmTest

package com.mozq.shiro.shiro01;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.subject.Subject;
import org.junit.Test; import java.util.HashSet; public class CustomRealmTest { @Test
public void testCustomRealm(){
//创建权限管理器,给定Realm提供认证和授权信息
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
CustomRealm customRealm = new CustomRealm();
defaultSecurityManager.setRealm(customRealm);
SecurityUtils.setSecurityManager(defaultSecurityManager); //获取主体
Subject subject = SecurityUtils.getSubject(); //认证
subject.login(new UsernamePasswordToken("刘备", "123"));
// subject.login(new UsernamePasswordToken("孙权", "123"));
System.out.println("subject.isAuthenticated():" + subject.isAuthenticated());
//授权
subject.checkRoles("砂场老板");
// subject.checkRoles("砂场老板", "砂场负责人");
subject.checkPermissions("user:add", "user:delete");
} @Test
public void testAddAll(){
HashSet<String> roles = new HashSet<>();
roles.addAll(null);//java.lang.NullPointerException
}
}

@startuml

interface Realm
abstract class CachingRealm
abstract class AuthenticatingRealm
abstract class AuthorizingRealm
class SimpleAccountRealm
class TextConfigurationRealm
class IniRealm
class PropertiesRealm
class JdbcRealm Realm <|.. CachingRealm
CachingRealm <|-- AuthenticatingRealm
AuthenticatingRealm <|-- AuthorizingRealm
AuthorizingRealm <|-- SimpleAccountRealm
SimpleAccountRealm <|-- TextConfigurationRealm
TextConfigurationRealm <|-- IniRealm
TextConfigurationRealm <|-- PropertiesRealm AuthorizingRealm <|-- JdbcRealm @enduml

shiro 基本知识测试的更多相关文章

  1. Shiro框架 - 【shiro基础知识】

     转载:https://segmentfault.com/a/1190000013875092#articleHeader27  读完需要 63 分钟   前言 本文主要讲解的知识点有以下: 权限管理 ...

  2. Android SDK上手指南:知识测试

    Android SDK上手指南:知识测试 2014-01-22 10:00 核子可乐 译 51CTO 字号:T | T 在从零开始学习Android开发系列教程当中,我们已经了解了为Android平台 ...

  3. 【考试】java基础知识测试,看你能得多少分?

    1 前言 共有5道java基础知识的单项选择题,每道20分,共计100分.解析和答案在最后. 2 试题 2.1 如下程序运行结果是什么? class Parent { public Parent(St ...

  4. Shiro基础知识08----拦截器介绍(转)

    1 拦截器介绍 Shiro使用了与Servlet一样的Filter接口进行扩展:所以如果对Filter不熟悉可以参考<Servlet3.1规范>http://www.iteye.com/b ...

  5. Shiro基础知识03----shiro授权(编程式授权),Permission详解,授权流程(zz)

    授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等).  在权限认证中,最核心的是:主体/用户(Subject).权限(Permission).角色(Role).资源 ...

  6. 安全小测试:介绍一个简单web安全知识测试的网站

    https://websecurity.firebaseapp.com/ 一次测试一共7道题,最后有答案,可以反复做,每次随机抽题

  7. 传智Java基础知识测试

    共40道选择题,每题2.5分.多选题有错则全错,全对才满分. 单选题: 1.   下列哪个声明是错误的?(B) A.  int  i=10; B.  float  f=1.1; C.  double  ...

  8. Js 正则表达式知识测试

    本文对javascript中正则表达式进行了总结汇总,将知识点和注意点都理了一下,并附上2个练习题,供大家参考学习. 正则表达式: 1.什么是RegExp?RegExp是正则表达式的缩写.RegExp ...

  9. Shiro入门这篇就够了【Shiro的基础知识、回顾URL拦截】

    前言 本文主要讲解的知识点有以下: 权限管理的基础知识 模型 粗粒度和细粒度的概念 回顾URL拦截的实现 Shiro的介绍与简单入门 一.Shiro基础知识 在学习Shiro这个框架之前,首先我们要先 ...

随机推荐

  1. Haproxy 构建负载均衡集群

    1.HAPROXY简介 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种负载均衡解决方案.HAProxy特别适用于那些负载特大的web ...

  2. STS 重写父类方法的操作

    本来这种东西真的没什么好写的,但是很多时候真的是要用到的,不知道的话自己手动敲,会累死人的.所以记录在这里,自己的笔记,有需要的赶紧拿去,省的手动录入那么辛苦. 在代码窗口点击右键,依次选择“Sour ...

  3. redis集群之Sentinel

    目前我们讲的 Redis 还只是主从方案,最终一致性.读者们可思考过,如果主节点凌晨3 点突发宕机怎么办?就坐等运维从床上爬起来,然后手工进行从主切换,再通知所有的程序把地址统统改一遍重新上线么?毫无 ...

  4. CodeForces - 560D Equivalent Strings

    Today on a lecture about strings Gerald learned a new definition of string equivalency. Two strings ...

  5. 搭建rsyslog日志服务器

    环境配置 centos7系统 client1:192.168.91.17 centos7系统 master:192.168.91.18 rsyslog客户端配置 1.rsyslog安装 yum ins ...

  6. 《数据结构》《C++程序设计》《计算机组成原理》中的英语名词

    一.数据结构 data 数据data element 数据元素data item 数据项data object 数据对象data structure 数据结构ADT (Abstruct Date Ty ...

  7. LocalDB 从2017更换到2014后一直显示连接不正确解决方案

    问题描述:LocalDB 版本混装后出现默认实例创建不成功 无法连接到 (LocalDB)\MSSQLLocalDB. ------------------------------其他信息: 在与 S ...

  8. Java 使用Navicat连接MySQL出现2059错误

    今天使用navicat链接mysql的时候报了2059的错误,找了很久才找到解决方法,这里记录一下.出现2059这个错误的原因是在mysql8之前的版本中加密规则为mysql_native_passw ...

  9. .net Dapper 学习系列(1) ---Dapper入门

    目录 写在前面 为什么选择Dapper 在项目中安装Dapper 在项目中使用Dapper 在项目中使用Dapper 进行单表增删改数据操作 总结 写在前面 Dapper 是一款轻量级ORM架构.为解 ...

  10. Winform中设置ZedGraph的颜色填充使用Fill

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...