进阶SpringBoot之 Shiro(2)环境搭建

news/2025/3/28 8:33:33/

Spring Boot 创建 Web 项目,pom.xml 导入 Thymeleaf 依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>

resources 目录下 templates 包新建 index.html

xmlns:th="http://www.thymeleaf.org"

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>首页</h1>
<p th:text="${msg}"></p>
</body>
</html>

controller 包下先创建 MyController.java 测试是否能执行成功

java">package com.demo.shirospringboot.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class MyController {@RequestMapping("/index")public String toIndex(Model model){model.addAttribute("msg","Hello,Shiro!");return "index";}
}

地址栏输入 localhost:8080/index 回车

执行成功!

Shiro 核心对象:

1.Subject 用户

2.SecurityManager 管理所有用户

3.Realm 连接数据

pom.xml 文件引入 shiro-spring 的 jar 包

        <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>2.0.1</version></dependency>

config 包下创建自定义 UserRealm 类

继承 AuthorizingRealm 方法,重写授权(doGetAuthorizationInfo)和认证(doGetAuthenticationInfo)方法

java">package com.demo.shirospringboot.config;import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;//自定义UserRealm
public class UserRealm extends AuthorizingRealm {//授权@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {System.out.println("授权");return null;}//认证@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {System.out.println("认证");return null;}
}

config 包下创建 ShiroConfig.java

java">package com.demo.shirospringboot.config;import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;@Controller
public class ShiroConfig {//第三步:ShiroFilterFactoryBean@Beanpublic ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager defaultWebSecurityManager) {ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();//设置安全管理器bean.setSecurityManager(defaultWebSecurityManager);return bean;}//第二步:DefaultWebSecurityManager@Bean(name="securityManager")public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm) {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();//关联UserRealmsecurityManager.setRealm(userRealm);return securityManager;}//第一步:创建realm对象,需自定义类@Beanpublic UserRealm userRealm(){return new UserRealm();}
}

templates 目录下再创建 user 目录,随便写两个 HTML 用来测试

MyController.java 添加 add 和 update 方法,设置跳转地址和返回页面

java">package com.demo.shirospringboot.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class MyController {@RequestMapping("/index")public String toIndex(Model model){model.addAttribute("msg","Hello,Shiro!");return "index";}@RequestMapping("/user/add")public String add(){return "user/add";}@RequestMapping("/user/update")public String update(){return "user/update";}
}

同理,index.html 也添加两个 a 链接标签

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>首页</h1>
<p th:text="${msg}"></p>
<hr><a th:href="@{/user/add}">add</a> | <a th:href="@{/user/update}">update</a></body>
</html>

启动,查看效果

在运行时发现一个 bug

threw exception with message: javax/servlet/Filter

经过搜索,找到解决方法

在 pom.xml 文件导入 javax.servlet-api 的 jar 包即可

        <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency>

http://www.ppmy.cn/news/1518703.html

相关文章

C++基础(1)——入门知识

目录 1.C版本更新 2.C参考⽂档&#xff1a; 3.C书籍推荐 4.C的第⼀个程序 5.命名空间 5.1namespace的价值 5.2namespace的定义 5.3 命名空间使⽤ 6.C输⼊&输出 7.缺省参数 8.函数重载 9.引⽤ 9.1引⽤的概念和定义 9.2引⽤的特性 9.3引⽤的使用 9.4const引⽤…

【目标检测】YOLOV3

YOLOv3: An Incremental Improvement 1、YOLO V3 Structure YOLO V3 网络结构借鉴类似 ResNet&#xff08;残差网络结构&#xff09;和 FPN&#xff08;Feature Pyramid Networks&#xff09;网络结构方式。 残差网络&#xff1a;残差网络通过在网络中引入跳跃连接&#xff08…

智能导诊系统:帮助患者找医院、找科室、找医生,解决“知症不知病”“知病不知科”“挂错号”问题

方案概述 智能导诊是基于医疗大模型、知识图谱、人机交互&#xff0c;帮助患者找医院、找科室、找医生&#xff0c;解决“知症不知病”“知病不知科”“挂错号”问题&#xff0c;根据病情分级导流&#xff0c;助力分级诊疗。支持通过语音、文字、点选、图片等多种方式与患者沟…

根据xml模板导出excel

依赖 <poi.version>5.2.3</poi.version> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>${poi.version}</version> </dependency> <dependency><groupId>org…

FFmpeg源码:ffurl_seek2、ffurl_seek、avio_size函数分析

一、ffurl_seek2函数 ffurl_seek2函数定义在FFmpeg源码&#xff08;本文演示用的FFmpeg源码版本为7.0.1&#xff09;的源文件libavformat/avio.c中&#xff1a; int64_t ffurl_seek2(void *urlcontext, int64_t pos, int whence) {URLContext *h urlcontext;int64_t ret;if …

Linux 用户缓冲区

1. 文件描述符的分配规则 我们知道Linux进程默认情况下会有3个缺省打开的文件描述符&#xff0c;分别是标准输入stdin--0&#xff0c; 标准输出stdout--1&#xff0c; 标准错误stderr--2。0,1,2对应的物理设备一般是&#xff1a;键盘&#xff0c;显示器&#xff0c;显示器.接下…

华发股份:销售排名稳居TOP10 谱写高质量发展新篇章

2024年8月30日晚&#xff0c;华发股份&#xff08;600325.SH&#xff09;发布2024年半年度报告。报告显示&#xff0c;公司实现营业总收入248.42亿元&#xff0c;归母净利润12.65亿元。面对复杂多变的宏观环境和行业调整的挑战&#xff0c;华发股份依然能够稳固其经营根基&…

EmguCV学习笔记 VB.Net 8.2 分水岭法 watershed

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…