工具idea

先看看数据库

shiro_role_permission

数据

shiro_user

shiro_user_role

数据

我们先看一下目录结构

首先

log4j.properties

### \u914D\u7F6E\u6839 ###
log4j.rootLogger = error,console ,fileAppender,dailyRollingFile,ROLLING_FILE,MAIL,DATABASE### \u8BBE\u7F6E\u8F93\u51FAsql\u7684\u7EA7\u522B\uFF0C\u5176\u4E2Dlogger\u540E\u9762\u7684\u5185\u5BB9\u5168\u90E8\u4E3Ajar\u5305\u4E2D\u6240\u5305\u542B\u7684\u5305\u540D ###
log4j.logger.org.apache=error
log4j.logger.java.sql.Connection=error
log4j.logger.java.sql.Statement=error
log4j.logger.java.sql.PreparedStatement=error
log4j.logger.java.sql.ResultSet=error### \u914D\u7F6E\u8F93\u51FA\u5230\u63A7\u5236\u53F0 ###
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{1}:%L - %m%n

jar包引入 pom.xml文件

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>geyaoshiro</groupId><artifactId>geyaoshiro</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>geyaoshiro Maven Webapp</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.2.3</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.6.1</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.6.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connecttor-java</artifactId><version>5.1.32</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.11.RELEASE</version></dependency><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version></dependency></dependencies><build><finalName>geyaoshiro</finalName><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><artifactId>maven-clean-plugin</artifactId><version>3.1.0</version></plugin><!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.2.2</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin></plugins></pluginManagement></build>
</project>

这一部分,我是自己手动找本地包加入的

shiro-mysql.ini

[main]
dataSource=org.springframework.jdbc.datasource.DriverManagerDataSource
dataSource.driverClassName=com.mysql.jdbc.Driver
dataSource.url=jdbc:mysql://localhost:3306/geyao?serverTimezone=GMT%2B8
dataSource.username=root
dataSource.password=123jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealmjdbcRealm.permissionsLookupEnabled=true
jdbcRealm.dataSource=$dataSource#重写sql语句
jdbcRealm.authenticationQuery=select PASSWORD from SHIRO_USER where USER_NAME=?jdbcRealm.userRolesQuery=select ROLE_NAME from SHIRO_USER_ROLE where USER_NAME=?jdbcRealm.permissionsQuery=select PERM_NAME from SHIRO_ROLE_PERMISSION where ROLE_NAME=?securityManager.realms=$jdbcRealm

myRealm2类

package com.geyao.shiro.test;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 org.springframework.jdbc.core.JdbcTemplate;import java.util.List;public class MyRealm2 extends AuthorizingRealm {private JdbcTemplate jdbcTemplate;public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}//q权限验证调用@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {System.out.println("doGetAuthorizationInfo");String sql="select ROLE_NAME from SHIRO_USER_ROLE where USER_NAME=?";String username=(String) principalCollection.getPrimaryPrincipal();List<String> roles =jdbcTemplate.queryForList(sql,String.class,username);SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();info.addRoles(roles);return null;}//登录的时候调用@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {System.out.println("doGetAuthenticationInfo");String sql="select PASSWORD from SHIRO_USER where USER_NAME=?";String username=(String) authenticationToken.getPrincipal();String password=jdbcTemplate.queryForObject(sql,String.class,username);SimpleAuthenticationInfo info=new SimpleAuthenticationInfo(username,password,null,getName());return info;}
}

shiroiniTest

package com.geyao.shiro.test;import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.pam.AtLeastOneSuccessfulStrategy;
import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
import org.apache.shiro.authz.ModularRealmAuthorizer;
import org.apache.shiro.authz.permission.WildcardPermissionResolver;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;public class ShiroIniTest {public static void main(String[] args){DefaultSecurityManager securityManager =new DefaultSecurityManager();ModularRealmAuthenticator authenticator=new ModularRealmAuthenticator();authenticator.setAuthenticationStrategy(new AtLeastOneSuccessfulStrategy());securityManager.setAuthenticator(authenticator);ModularRealmAuthorizer authorizer = new ModularRealmAuthorizer();authorizer.setPermissionResolver(new WildcardPermissionResolver());securityManager.setAuthorizer(authorizer);// dataSource=org.springframework.jdbc.datasource.DriverManagerDataSourceDriverManagerDataSource dataSource=new DriverManagerDataSource();// dataSource.driverClassName=com.mysql.jdbc.DriverdataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");//dataSource.url=jdbc:mysql://localhost:3306/geyao?serverTimezone=GMT%2B8dataSource.setUrl("jdbc:mysql://localhost:3306/geyao?serverTimezone=GMT%2B8&useSSL=true ");// dataSource.username=rootdataSource.setUsername("root");dataSource.setPassword("123");JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);MyRealm2 myRealm2=new MyRealm2();myRealm2.setJdbcTemplate(jdbcTemplate);securityManager.setRealm(myRealm2);SecurityUtils.setSecurityManager(securityManager);// dataSource.password=123Subject subject = SecurityUtils.getSubject();UsernamePasswordToken token = new UsernamePasswordToken("admin@shiro.com", "admin");//UsernamePasswordToken token2 = new UsernamePasswordToken("password", "wei");try {// 4、登录,即身份验证subject.login(token);System.out.println(subject.hasRole("admin"));System.out.println("登录密码成功");}catch (AuthenticationException e){e.printStackTrace();System.out.println("登录密码失败");}}
}

运行结果

shiro学习(8):shiro连接数据库 三相关推荐

  1. Shiro学习--Apache Shiro Architecture(Shiro架构)

    Apache Shiro Architecture 参考 http://shiro.apache.org/architecture.html 本文有点翻译的意思,是为了梳理Shiro的知识而做的Shi ...

  2. Shiro学习之Shiro授权的内部处理机制(六)

    1.在应用程序中调用授权验证方法(Subject的isPermitted*或hasRole*等) 2.Sbuject的实例通常是DelegatingSubject类(或子类)的实例对象,在认证开始时, ...

  3. Shiro学习记录(详细)

    文章目录 Shiro学习记录 shiro核心组件 Spring Boot 整合 Shiro Shiro 整合 Thymeleaf Shiro学习记录 什么是 Shiro 官网:http://shiro ...

  4. Shiro学习笔记(三)源码解析

    Shiro作为轻量级的权限框架,Shiro的认证流程是怎样的一个过程. 如果没有对Shiro进行了解的话,建议先对Shiro学习笔记(一)学习一下Shiro基本的组 成. 1,几大重要组件解析 1.1 ...

  5. Shiro学习(三)——关于Subject的创建

    前言 本文属于源码分析,只想了解Shiro使用的读者请略过. Subject接口是Shiro中非常重要的接口,客户端通常会使用Subject的方法进行登录.登出.鉴权.角色判断等功能.在<Shi ...

  6. Shiro学习笔记_02:shiro的认证+shiro的授权

    Shiro 学习笔记 本文基于B站UP主[编程不良人]视频教程[2020最新版Shiro教程,整合SpringBoot项目实战教程]进行整理记录,仅用于个人学习交流使用. 视频链接:https://w ...

  7. SpringBoot整合Shiro学习(上)

    SpringBoot整合Shiro(上) 基于[编程不良人]2020最新版Shiro教程,整合SpringBoot项目实战教程 哔哩哔哩链接:https://www.bilibili.com/vide ...

  8. shiro 学习笔记

    1. 权限管理 1.1 什么是权限管理? 权限管理实现对用户访问系统的控制,按照安全规则或者安全策略,可以控制用户只能访问自己被授权的资源 权限管理包括用户身份认证和授权两部分,简称认证授权 1.2 ...

  9. shiro 学习(一)

    title: shiro学习(一) date: 2020-11-13 tags: spring springboot shiro categories: spring springboot shiro ...

  10. SpringBoot+Shiro学习(八):RememberMe

    这一章比较简单,就不多说了,上代码: /** * cookie对象; * rememberMeCookie()方法是设置Cookie的生成模版,比如cookie的name,cookie的有效时间等等. ...

最新文章

  1. 快速部署Telegraf Influxdb
  2. mysql 添加外键时 error 150 问题总汇
  3. VTK修炼之道14:图像处理_创建
  4. 网易云信联合浙江大学信电学院成立创新与实践基地,探索音视频前沿技术
  5. python的jsonpath_python 提取json数据的jsonPath介绍及简单使用
  6. 【计算机网络】TCP/IP 模型与OSI参考模型的比较
  7. bashrcprofile
  8. mysql mvcc 隔离级别_隔离级别和MVCC
  9. 倍受好评的美国主机JustHost使用全攻略教程
  10. python openstack vpc互通_深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(一)-简述与端口转发...
  11. SubSonic:一个对象的引用是必需的对于非静态字段
  12. 安全漏洞整改解决方案
  13. Ubuntu下安装opencv3.2.0,解决anaconda下的Python和安装opencv3.2.0冲突的问题
  14. 当我们在讨论机器学习时我们在说些什么?
  15. Apache Flink 在斗鱼的应用与实践
  16. ecg 幅度_用ECG和PPG测血压靠谱吗?有什么比较好的算法?
  17. 虚拟机安装XP操作系统
  18. 无法登录苹果开发者_利用Apple Developer申请苹果开发者账号(解决支付授权失败问题)...
  19. java集成信鸽推送
  20. windows控制台命令: 快捷键大集合

热门文章

  1. bootstrap基础学习十篇
  2. sharedPreferences的用法
  3. 201506230818_《JavaScript权威指南(第六版)——callee和caller、对象属性用作实参、自定义函数属性》(P175-180)...
  4. 也谈如何构建高性能服务端程序
  5. C# 繁体,简体互转
  6. xp系统oracle数据库,Oracle10g 数据库的安装基于windowsXP
  7. java继承原理内存角度_Java基础知识巩固
  8. dft对称性 matlab实验,数字信号处理实验指导书(审)
  9. mysql 对表插入多行_MySQL表中怎么一次插入两行或更多行
  10. 让你的WordPress主题支持自定义菜单