博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shiro入门示例
阅读量:6174 次
发布时间:2019-06-21

本文共 4734 字,大约阅读时间需要 15 分钟。

一、pom引入maven依赖

junit
junit
4.12
commons-logging
commons-logging
1.2
org.apache.shiro
shiro-core
1.3.2

  

二、从ini文件获取用户名密码

shiro.ini文件
[users]admin=123456
 
单元测试:
@Testpublic void demoIni(){    //init配置文件初始化SecurityManager工厂    Factory
factory=new IniSecurityManagerFactory("classpath:shiro.ini"); SecurityManager securityManager=factory.getInstance(); SecurityUtils.setSecurityManager(securityManager); Subject subject=SecurityUtils.getSubject(); UsernamePasswordToken token=new UsernamePasswordToken("admin","123456"); try{ subject.login(token); }catch (AuthenticationException ex){ } org.junit.Assert.assertEquals(true,subject.isAuthenticated()); subject.logout();}

 

三、自定义realm

1.自定义myRealm
public class myRealm1 implements Realm {    public String getName() {        return "myRealm1";    }     public boolean supports(AuthenticationToken authenticationToken) {        return authenticationToken instanceof UsernamePasswordToken;    }     public AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {        String username=(String)token.getPrincipal();        String password=new String((char[])token.getCredentials());         if(!username.equals("admin")){            throw new UnknownAccountException();        }         if(!password.equals("123456")){            throw new IncorrectCredentialsException();        }         return new SimpleAuthenticationInfo(username,password,getName());    }}

 

2.shiro-realm.init配置文件
[main]myrealm=realms.myRealm1securityManager.realms=$myrealm 
说明:
  • 变量名=全限定类名会自动创建一个类实例
  • 变量名.属性=值 自动调用相应的setter方法进行赋值
  • $变量名 引用之前的一个对象实例 
 
3.单元测试
@Testpublic void demoCustomRealm(){    //init配置文件初始化SecurityManager工厂    Factory
factory=new IniSecurityManagerFactory("classpath:shiro-realm.ini"); SecurityManager securityManager=factory.getInstance(); SecurityUtils.setSecurityManager(securityManager); Subject subject=SecurityUtils.getSubject(); UsernamePasswordToken token=new UsernamePasswordToken("admin","123456"); try{ subject.login(token); }catch (AuthenticationException ex){ } org.junit.Assert.assertEquals(true,subject.isAuthenticated()); subject.logout();}

三、jdbc realm

1.还需要引入依赖
mysql
mysql-connector-java
6.0.6
com.alibaba
druid
1.1.3

  2.sql

use cathycms; create table users (  id bigint auto_increment,  username varchar(100),  password varchar(100),  password_salt varchar(100),  constraint pk_users primary key(id)) charset=utf8 ENGINE=InnoDB;create unique index idx_users_username on users(username); create table user_roles(  id bigint auto_increment,  username varchar(100),  role_name varchar(100),  constraint pk_user_roles primary key(id)) charset=utf8 ENGINE=InnoDB;create unique index idx_user_roles on user_roles(username, role_name); create table roles_permissions(  id bigint auto_increment,  role_name varchar(100),  permission varchar(100),  constraint pk_roles_permissions primary key(id)) charset=utf8 ENGINE=InnoDB;create unique index idx_roles_permissions on roles_permissions(role_name, permission); insert into users(username,password)values('admin','123');

  

3.ini配置文件
[main]jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealmdataSource=com.alibaba.druid.pool.DruidDataSourcedataSource.driverClassName=com.mysql.jdbc.DriverdataSource.url=jdbc:mysql://localhost:3306/cathycmsdataSource.username=rootdataSource.password=rootjdbcRealm.dataSource=$dataSourcesecurityManager.realms=$jdbcRealm

   

4.单元测试
@Testpublic void demoJdbcRealm(){    //init配置文件初始化SecurityManager工厂    Factory
factory=new IniSecurityManagerFactory("classpath:shiro-jdbc-realm.ini"); SecurityManager securityManager=factory.getInstance(); SecurityUtils.setSecurityManager(securityManager); Subject subject=SecurityUtils.getSubject(); UsernamePasswordToken token=new UsernamePasswordToken("admin","123"); try{ subject.login(token); }catch (AuthenticationException ex){ } org.junit.Assert.assertEquals(true,subject.isAuthenticated()); subject.logout();}

  

 
参考资料:说起shiro,最好的教程必须是张开涛老师的《跟我学shiro系列》

转载地址:http://gktba.baihongyu.com/

你可能感兴趣的文章
谷物大脑
查看>>
访问控制-禁止php解析、user_agent,PHP相关配置
查看>>
AgileEAS.NET之系统架构
查看>>
python3.5里的正则表达式
查看>>
Exchange server 2013 SP1 客户端会议室邮箱自动回复延迟
查看>>
nginx反向代理缓存服务器构建
查看>>
RHEL6 搭建LVS/DR 负载均衡集群 案例
查看>>
以太坊·Rinkeby 测试网络
查看>>
字符串按规则排序算法
查看>>
MPLS + BGP高级特性
查看>>
plist文件读写操作
查看>>
oracle resetlogs和noresetlogs 创建控制文件区别
查看>>
2013-7-17学习作业练习
查看>>
ZAM 3D入门教程(4):Extrusion编辑器
查看>>
《深入实践Spring Boot》一第2章 在Spring Boot中使用数据库2.1 使用MySQL
查看>>
C++语言基础 例程 字符串类
查看>>
[Docker系列·7] 使用nsenter调试Docker镜像
查看>>
[Docker系列·11] 搭建ZooKeeper服务器
查看>>
PostgreSQL 与 12306 抢火车票的思考
查看>>
堆排序
查看>>