博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot和shiro整合项目实战四(图解超详细)
阅读量:3897 次
发布时间:2019-05-23

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

承接上一篇博客:

首先要说的是,这个项目实战是参考自黑马,可以去对应视频看一看:
在这里插入图片描述

首先在pom里导入对应的依赖

com.alibaba
druid
1.0.9
mysql
mysql-connector-java
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.1.1

我选择用Navicat来做对应数据库操作

首先是创建数据库,我给的数据库名字是test_shiro
在这里插入图片描述
并创建对应的用户表

CREATE TABLE USER( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), PASSWORD VARCHAR(20));

在这里插入图片描述

顺便也是插入一条记录来方便测试
在这里插入图片描述

然后就是配置application,properties,创建在src/main/resources.但是如果你使用的是idea的话,是会在创建项目的时候自带创建一个这个的。

在这里插入图片描述

spring.datasource.driverClassName=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/test_shiro?serverTimezone=UTCspring.datasource.username=rootspring.datasource.password=admin# 连接池配置spring.datasource.type=com.alibaba.druid.pool.DruidDataSource# mybatis 别名扫描mybatis.type-aliases-package=com.example.domain

这里的用户名和密码,以及数据库名都需要做对应的修改

对于数据库的连接,也可以用idea测试一下
在这里插入图片描述
然后创建对应的包
在这里插入图片描述
创建User类

package com.example.domain;public class User {
private Integer id; private String name; private String password; public Integer getId() {
return id; } public void setId(Integer id) {
this.id = id; } public String getName() {
return name; } public void setName(String name) {
this.name = name; } public String getPassword() {
return password; } public void setPassword(String password) {
this.password = password; } }

再创建UserMapper接口

package com.example.mapper;import com.example.domain.User;public interface UserMapper {
//这里只有一个方法 public User findByName(String name);}

再是,创建一个xml来对这个接口进行实现,这边和视频不一样的在于,看了下面的评论区:

在这里插入图片描述
所以第一步是 对application,properties进行修改加入

mybatis.mapper-locations=classpath*:mapping/*.xml

再创建对应的文件夹

和xml文件

再创建业务包

在这里插入图片描述
创建UserService接口和实现
UserService

package com.example.service;import com.example.domain.User;public interface UserService {
//也是对应的方法 public User findByName(String name);}

UserServiceImpl

package com.example.serviceImpl;import com.example.domain.User;import com.example.mapper.UserMapper;import com.example.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;//这个用来实现这个方法@Servicepublic class UserServiceImpl  implements UserService {
//实现这个方法的途径 其实就是调用mapper接口 //注入mapper 而且是用自动注入的方法 @Autowired private UserMapper userMapper; @Override public User findByName(String name) {
//就是直接调用userMapper return userMapper.findByName(name); }}

但这边userMapper会提示这个错误

在这里插入图片描述
所以需要修改启动类application加入

@MapperScan("com.example.mapper")

最后修改UserReal实现真正的数据库连接

package com.example.shiro;import com.example.domain.User;import com.example.service.UserService;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.springframework.beans.factory.annotation.Autowired;/** * 自定义的Realm shiro有两个功能,认证和授权,所以刚好实现这两个功能 */public class UserRealm extends AuthorizingRealm {
@Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
System.out.println("执行授权逻辑"); return null; } @Autowired private UserService userService; @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
System.out.println("执行认证逻辑"); /*//假设数据库的用户名和密码 String name="wzw"; String password="123";*/ //这里就用真的连接了数据库的 //编写shiro判断逻辑,也就是判断用户名和密码 //首先是判断用户名, 也就是看和数据库的是否一致,强制转换这个,然后就可以对比了 UsernamePasswordToken token= (UsernamePasswordToken)authenticationToken; //这里用来查询用户名 User user=userService.findByName(token.getUsername()); /* if(!token.getUsername().equals(name)){ //也就是用户名不存在,直接返回null就行,shiro的底层会抛出异常的 return null;//shiro底层 UnKnowAccountException }*/ if(user==null){
//也就是用户名不存在,直接返回null就行,shiro的底层会抛出异常的 return null;//shiro底层 UnKnowAccountException } //判断密码的话,可以认为是shiro可以自动判断,只需要返回AuthenticationInfo的一个子类,并且返回对应的参数即可 //第一个和最后一个参数可以省略,只需要中间这个参数是密码即可 // return new SimpleAuthenticationInfo("",password,""); //这里是新的 return new SimpleAuthenticationInfo("",user.getPassword(),""); }}

然后启动一下,测试一下

输入一个错误的用户名
在这里插入图片描述
这里报错了,所以要再application.properties进行修改com.mysql.cj.jdbc.Driver(你们不一定会遇到这个错误)
再输入一个错误的账号密码
在这里插入图片描述

在这里插入图片描述

而输入正确的,即可!!!

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

你可能感兴趣的文章
Shell之导出数据库的表为Excel的脚本
查看>>
Shell之预启动脚本
查看>>
WebKit之Node的继承关系图
查看>>
WebKit之RenderObject继承关系图整理
查看>>
WebKit之JSCell的继承关系图
查看>>
WebKit之HTMLTreeBuilder类的解析框架
查看>>
WebKit之HTMLConstructionSite类组成
查看>>
Linux之so加载原理分析
查看>>
C之基于signal信号的交互式的测试功能模块(触发时机)
查看>>
Linux之libevent的编译&测试
查看>>
Linux之kc.cfg文件参数详解
查看>>
MySql之简单SQL用法整理
查看>>
PHP之thinkphp的数据库操作代码段汇总
查看>>
Linux之tcpdump用法汇总整理
查看>>
Linux之tcp的结构分析
查看>>
WebKit之WebSocket模块的代码层初步分析
查看>>
WIFI之Agent调度关系
查看>>
WIFI之升级协议列表
查看>>
MCU之STM32可用硬件(外部接口)一览表
查看>>
MySql之设备管理的数据表设计列表
查看>>