shiro整合mybatis数据库

使用shiro实现用户拦截和登录验证之后,整合mybatis数据库

1、导入依赖

<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.5</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!--shiro整合spring的包--><!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-spring --><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.7.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf-spring5 --><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.12.RELEASE</version></dependency><dependency><groupId>org.thymeleaf.extras</groupId><artifactId>thymeleaf-extras-java8time</artifactId></dependency></dependencies>

2、Druid数据源专有配置

application.yml

spring:datasource:username: rootpassword: rootpassurl: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=UTF-8driver-class-name: com.mysql.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource#SpringBoot默认是不注入这些的,需要自己绑定#druid数据源专有配置initialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入#如果允许报错,java.lang.ClassNotFoundException: org.apache.Log4j.Properity#则导入log4j 依赖就行filters: stat,wall,log4jmaxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

3、连接数据库

在这里插入图片描述
在这里插入图片描述

4、数据库配置

4.1 pom.xml中加入mybtis-springboot依赖

<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency>

4.2 application.properties

mybatis.type-aliases-package=com.kuang.pojo
mybatis.mapper-locations=classpath:mapper/*.xml

5、添加pojo类

导入lombok依赖

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.18</version><scope>provided</scope></dependency>

新建pojo包,以及User实体类
在这里插入图片描述

package com.kuang.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private int id;private String name;private String pwd;
}

6、添加mapper映射

在这里插入图片描述

package com.kuang.mapper;import com.kuang.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;@Repository
@Mapper
public interface UserMapper {public User queryUserById();
}

7、添加mapper.xml文件

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.orgl/DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kuang.mapper.UserMapper"><select id="queryUserByName" parameterType="String" resultType="User" >select * from mybatis.user where name=#{name}</select></mapper>

8、编写service层

在这里插入图片描述

package com.kuang.service;import com.kuang.pojo.User;public interface UserService {public User queryUserByName(String name);
}
package com.kuang.service;import com.kuang.mapper.UserMapper;
import com.kuang.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl implements UserService{@AutowiredUserMapper userMapper;@Overridepublic User queryUserByName(String name) {return userMapper.queryUserByName(name);}
}

9、测试从数据库中获取数据是否成功

在这里插入图片描述

package com.kuang;import com.kuang.service.UserServiceImpl;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class ShiroSpringbootApplicationTests {@AutowiredUserServiceImpl userServiceImpl;@Testvoid contextLoads() {System.out.println(userServiceImpl.queryUserByName("狂神"));}
}

10、结果

在这里插入图片描述
说明到这里环境已搭建完成并无误

11、修改自定义的Realm,连接真实的数据库

package com.kuang.config;import com.kuang.pojo.User;
import com.kuang.service.UserService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;//自定义的userRealm
public class UserRealm extends AuthorizingRealm {@AutowiredUserService userService;//授权@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {System.out.println("执行了==>授权doGetAuthorizationInfo");return null;}//认证@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {   System.out.println("执行了==>认证doGetAuthenticationInfo");//用户名,密码~ 数据库中取UsernamePasswordToken userToken = (UsernamePasswordToken) token;//连接真实的数据库User user = userService.queryUserByName(userToken.getUsername());if(user==null){return null;}return new SimpleAuthenticationInfo("",user.getPwd(),"");}
}

到此,就可以使用shiro验证用户和登录拦截了。

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

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

相关文章

力扣09-回文数

第一种解法&#xff0c;是将整数转换为字符串&#xff0c;排除x<0这种必不为回文数的情况&#xff0c;和x0这种必为回文数的情况&#xff0c;x>0的情况以字符串中间位置为界&#xff0c;循环判断两侧字符是否相等。 import java.util.Scanner;public class Palindrome9 …

LeetCode450题—— 删除二叉搜索树中的节点

首先需要认识什么是二叉搜索树&#xff0c;可以进入百度词条https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91/7077855?fraladdin 一定要注意题目要求算法时间复杂度是O(h)。 递归方法&#xff1a; /*** Definition for a binary tree node.* …

leetCode —— 1200.最小绝对差

class Solution {public List<List<Integer>> minimumAbsDifference(int[] arr) {//由小到大排序Arrays.sort(arr);int min arr[1]-arr[0];//注意这个最小值的选取for (int i 1; i < arr.length; i) {if (min > arr[i] - arr[i - 1] ){min arr[i] - arr[i…

LeetCode——1721.交换链表中的节点

方法一&#xff1a;好理解&#xff0c;但是需要遍历三次链表 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) …

LeetCode——866.回文素数

分析&#xff0c;这个题目本身不难&#xff0c;用数学方法很容易解出来&#xff0c;问题是当给的数据过大时&#xff0c;容易超时。 数学法&#xff1a;遍历所有数字&#xff0c;检查是不是回文串。如果是&#xff0c;检查是不是素数&#xff0c;如果当前数字长度为 8&#xff…

Cannot resolve jakarta.validation:jakarta.validation-api:2.0.2

在SpringCloud中引入Eureka依赖时报错 Cannot resolve jakarta.validation:jakarta.validation-api:2.0.2 在maven里面只要引入了Eureka的地方全部报红线 后面看见引入Eureka包pom报红这篇博文说&#xff0c;在maven仓库里面我添加的依赖已经过时了。去官网看&#xff0c;也确…

分享Silverlight/WPF/Windows Phone一周学习导读(8月15日-8月19日)

分享Silverlight/WPF/Windows Phone一周学习导读(8月15日-8月19日) 本周Silverlight学习资源更新&#xff1a; Silverlight Tools 4安装时的错误提示 happy_0812 Silverlight带关闭动画的内容控件&#xff0c;可移动的内容控件&#xff08;二&#xff09; 豆豆狗 未安装Silverl…

知识库如何跟其他业务系统结合

很多企业在建立自己的知识库之前就有了很多业务系统&#xff0c;知识库建好以后&#xff0c;却不知道该如何跟自己的业务系统相结合。KMaster提供了几点知识库跟业务系统相结合的经验&#xff0c;供大家参考。 1. web插件的形式。 在业务系统中引用知识库提供的js文件&am…

IDEA中的模块被识别为普通文件夹,图标为灰色的

现象&#xff1a; 所有图标都是灰色&#xff0c;不被识别为模块 解决办法&#xff1a; 打开settings—> Build,Execution,deployment—>maven —>ignored Files —>然后把你出问题的项目勾掉就恢复正常了额,图标啥的都恢复了

LeetCode——LCP 06.拿硬币

这个题简单到我觉得不用写思路&#xff0c;也没有啥坑。 class Solution {public int minCount(int[] coins) {int len coins.length;int count 0;for(int i0;i<len;i){countcoins[i]/2;if(coins[i]%20){continue;}else{count1;}}return count;} }

Linux 定时执行命令 crontab

语法介绍 使用权限 : root用户和crontab文件的所有者    crontab格式语法: crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ]    说明 : crontab 是用来让使用者在固定时间或固定间隔执行程式之用&#xff0c;换句话说&#xff0c;也就是类似使用…

LeetCode——1710. 卡车上的最大单元数

力扣上提交的代码 class Solution {public int maximumUnits(int[][] boxTypes, int truckSize) {int res 0;//存储可以装载单元的最大总数//根据二维数组的第二列数据降序排列Arrays.sort(boxTypes,(o1, o2) -> o2[1]-o1[1]);for (int i 0; i<boxTypes.length &&…

狂神说JVM笔记

JVM探究 面试常见&#xff1a; 请你谈谈你对JVM的理解?java8虚拟机和之前的变化更新?什么是OOM&#xff0c;什么是栈溢出StackOverFlowError? 怎么分析?JVM的常用调优参数有哪些?内存快照如何抓取&#xff0c;怎么分析Dump文件&#xff1f;谈谈JVM中&#xff0c;类加载器…

Xshell连接远程Linux服务器失败Could not connect to ‘192.xxx.xx.xxx‘ (port 22): Connection failed.

问题描述&#xff1a; 我将自己的一台Ubuntu系统笔记本作为服务器&#xff0c;然后使用另一台win10系统的Xshell去远程连接该服务器&#xff0c;始终不成功。 【备注】这个远程连接解决的是同一局域网中的远程&#xff0c;算不上真正的远程&#xff0c;在判断两者之间可否远程…

XShell远程连接LInux服务器(地址端口映射方法)

所实现的功能&#xff1a; 这篇文章主要是记录我在非同一局域网下用win10系统的Xshell去连接Linux系统服务器。 环境&#xff1a;一台win10主机&#xff0c;已安装好Xshell7&#xff0c;局域网ip:192.168.0.132 一台Linux主机&#xff0c;将其作为远程服务器使用&#xff0c;…

IDEA部署Tomcat报错[RMI TCP Connection(6)-127.0.0.1]

> 严重 [RMI TCP Connection(6)-127.0.0.1] > org.apache.catalina.core.StandardContext.startInternal One or more Filters failed to start. Full details will be found in the appropriate container log file该错误出现的原因是Tomcat初始化失败。 一定一定要检查…

maven仓库理解、下载及设置

1、对maven仓库的理解&#xff1a; 可以看萨姆大叔的maven知识整理 2、下载apach maven Download 或者复制地址&#xff1a;http://maven.apache.org/download.cgi 3、IDEA中maven的setting 第六步是本地资料库的目录设置&#xff0c;如果你解压出来的maven安装包没有reposit…

Failed to load resource: the server responded with a status of 404 (Not Found)

现象描述&#xff1a; 从前端页面获取不到来自controller层的data数据&#xff0c;即前端页面和后台没有实现数据交互。 检查发现&#xff1a; 工程中的out目录下没有生成对应的.java文件&#xff0c;但是模块中的target中有 目录是空的&#xff01;&#xff01;&#xff…

JavaWeb关于工程运行的笔记

1、不同IDEA版本创建web部署的方式不同 IDEA2020.3&#xff1a;Idea2020.2.3 创建JavaWeb项目(部署Tomcat)方法 IDEA2020.2&#xff1a;Idea2020.2创建JavaWeb项目(部署Tomcat)方法 注意&#xff1a; 1、在已有工程中创建javaWeb模块也是一样的步骤去部署Tomcat方法。 2、可以…

Xshell使用root用户连接Linux

遇到问题&#xff1a; 我在本地使用 Xftp 向远程 Linux 服务器上传文件时&#xff0c;显示状态 “错误”&#xff0c;经过上网查询说&#xff0c;需要 Xshell 使用 root 用户远程登录才可以传输文件。我的 Linux 服务器系统为 Ubuntu 的系统&#xff0c;本地 Xshell 用 root 用…