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

news2024/11/27 1:40:22

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 测试是否能执行成功

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)方法

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 {

    //授权
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        System.out.println("授权");
        return null;
    }

    //认证
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        System.out.println("认证");
        return null;
    }
}

config 包下创建 ShiroConfig.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
    @Bean
    public 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();
        //关联UserRealm
        securityManager.setRealm(userRealm);
        return securityManager;
    }

    //第一步:创建realm对象,需自定义类
    @Bean
    public UserRealm userRealm(){
        return new UserRealm();
    }
}

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

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

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.coloradmin.cn/o/2092341.html

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

相关文章

VastBase——数据库参数调优

一、内存参数调优 数据库的复杂查询语句性能非常强的依赖于数据库系统内存的配置参数。数据库系统内存的配置参数主要包括逻辑内存管理的控制参数和执行算子是否下盘的参数&#xff1a; 1.逻辑内存管理参数&#xff1a;max_process_memory max_process_memory – shared memo…

SQL Server Profiler 工具的使用

在很多时候&#xff0c;我们需要优化接口的执行效率&#xff0c;一方面是提高代码在内存中的执行效率&#xff0c;另一方面就是提高数据库操作相关的效率了。 .NET中在System.Diagnostics类库下提供了Stopwatch类用来分析代码的执行耗时。那么如果是牵扯到数据库相关的操作&am…

前端速通面经八股系列(一)—— CSS篇

CSS高频面经目录 一、CSS基础1. CSS选择器及其优先级2. CSS中可继承与不可继承属性有哪些3. display的属性值及其作用4. display的block、inline和inline-block的区别5. 隐藏元素的方法有哪些6. link和import的区别7. transition和animation的区别8. display:none与visibility:…

Beyond Compare 4试用过期规避办法

声明: 支持正版软件 一: 注册表处理 在搜索栏中输入 regedit &#xff0c;打开注册表 删除项目&#xff1a;计算机\HKEY_CURRENT_USER\Software\ScooterSoftware\Beyond Compare 4\CacheId 二: 脚本处理 创建bat文件, 写入下面的命令行. reg delete “HKEY_CURRENT_USER\…

华为od全面介绍!!!

三分钟带你全面了解华为OD 【合同及管理】签约方为科锐国际/外企德科&#xff08;人力服务公司&#xff09;&#xff0c;劳动合同期为4年&#xff0c;试用期6个月。员工关系合同管理、五险一金、考勤发薪由科锐国际/外企德科负责&#xff1b;定级定薪、员工培训、工作安排、绩…

Redis的配置和启动+Redis Insight连接

一、安装 Redis的安装&#xff1a;从镜像站下载&#xff1a;索引 redis-local (huaweicloud.com)&#xff0c;然后将其传到Linux虚拟机中进行解压&#xff0c;解压之后需要下载gcc&#xff0c;因为Redis底层是用c写的&#xff0c;所以要编译一下生成redis文件&#xff0c;然后…

人工智能领域正经历模型规模变革,小型语言模型(SLM)崛起,挑战“规模至上”观念。

在人工智能领域&#xff0c;一场关于模型规模的深刻变革正在悄然发生。长久以来&#xff0c;科技巨头们热衷于庞大语言模型&#xff08;LLM&#xff09;的开发竞赛&#xff0c;但如今&#xff0c;小型语言模型&#xff08;SLM&#xff09;正以其独特的优势逐步崭露头角&#xf…

麦弗逊悬架KC特性分析APP开发与应用

汽车悬架系统是汽车重要的组成部分之一&#xff0c;起到支撑车身、减震降噪、提高行驶稳定性等多种作用。其中&#xff0c;悬架系统的K&C特性是一个重要指标&#xff0c;直接影响到汽车的操纵稳定性和乘坐舒适性&#xff0c;是悬架系统设计和优化的关键目标之一。 图1 汽车…

font-face 字体设置

摘要: font-face是css3中允许使用自定义字体的一个模块。 font-face的是一个CSS规则&#xff0c;允许你输入自己的字体出现在网站上&#xff0c;即使在特定的字体在访问者的计算机上没有安装。这条规则最重要的是&#xff0c;它为设计师打开了一个全新的世界。您可以使用任何你…

不平衡分类的成本敏感学习

不平衡分类的成本敏感学习 大多数机器学习算法都假设模型所犯的所有错误分类错误都是相同的。 对于不平衡分类问题&#xff0c;情况通常并非如此&#xff0c;因为遗漏正类或少数类案例比错误地将示例归类为负类或多数类更糟糕。有许多现实世界的例子&#xff0c;例如检测垃圾…

高效好用的10个自动化办公库分享

高效可用的10个自动化办公库 10个常用的Python自动化办公库本次内容涵盖了Excel、Word、PPT、ODF、PDF、邮件、微信、文件处理等所有能在办公场景实现自动化的库&#xff0c;希望能够对大家有所帮助。 PythonExcel自动化库 1.xlwings 库官网&#xff1a;https://www.xlwings…

用 Python 解锁电影台词中的秘密:给孩子一个学英语的新奇方式

引言 想象一下&#xff1a;孩子们不仅在看他们喜欢的电影&#xff0c;还能从中学到新的英语单词&#xff01;有没有什么比这更有趣、更高效的学习方式&#xff1f;在这篇博客中&#xff0c;我将带你一步步搭建一个 Python 工具&#xff0c;从电影台词中提取单词并生成详细的词…

06:网表更新到PCB

1.先了解HDMI设计规范 有4对差分线&#xff0c;1对IIC串行总线信号从芯片---->防静电器件—>HDMI输出 发现错误&#xff0c;没有SDA网络&#xff0c;检查原理图 重新导网表 3.完成信号芯片—>防静电模块—>HDMI布局

PMP–知识卡片--迭代型生命周期

迭代指的是多次循环。例如&#xff0c;软件开发按照版本发布&#xff0c;每一个版本内部都是一个小的瀑布开发&#xff0c;都会经历“需求分析—设计—开发—测试—发布”周期&#xff0c;下一个迭代在此基础上重复这些步骤&#xff0c;对软件进行优化升级&#xff0c;发布新的…

用友U8接口-自定义项和扩展自定义项(6)

概括 本文的操作需要正确部署U8API保存单据时传入自定义项和扩展自定义项 单据自定义项 ERP界面 接口参数 自定义项为标准erp字段&#xff0c;以cDefine开始的字段对应接口传入参数位置 [{"Inum": "OtherIn","Data": {"iHead": {&…

和星辰为伴,与代码共舞

大家好&#xff0c;我是小悟 在探索数字编织的浩瀚宇宙中&#xff0c;独立开发者犹如孤独的星际航行者&#xff0c;驾驶着创意与技术的飞船&#xff0c;穿梭于代码的无垠星海。 他们的日常工作&#xff0c;是一幅由无数个日夜辛勤耕耘编织而成的壮丽画卷&#xff0c;每一笔都…

进程通信——共享内存

文章目录 1.基本认识1.1 概念介绍1.2主要原理 2.使用方法2.1创建共享内存shmget2.1.1 shmget2.1.2 ftok 2.2映射地址空间shmat2.3 访问共享内存2.4 同步和互斥 3.接口封装3.1 创建shm_create3.2 映射shm_connect3.3 多进程共享内存 共享内存是一种机制&#xff0c;也是进程间进…

SpringBoot中@SchedulerLock注解实现定时任务中分布式锁的使用

背景 在SpringBoot项目中经常会去写一些定时任务&#xff0c;但是当我们的服务的实例部署多个的情况下&#xff0c;那么每个实例中的定时任务都会执行一遍&#xff0c;这显然不是我们想要的&#xff0c;我们只想让它执行一次。在没有引入像xxl-job之类的分布式任务调度框架的前…

BIRTV2024圆满落幕,中科极光9万流明点亮观影新体验

8月21日,第三十一届北京国际广播电影电视展览会BIRTV 2024隆重开幕。展示广电先进技术设备和发展成果&#xff0c;引领中国广播影视技术发展潮流&#xff0c;全媒体、超高清、强智能&#xff0c;带着本届BIRTV理念&#xff0c;中科极光携RGB三色激光光源升级解决方案LSS-AM系列…

【大模型】LangChain基础学习

前言:LangChain是一个用于构建端到端语言模型应用的框架 目录 1. 基础知识2. 基本使用2.1 安装2.2 启动示例2.3 使用prompt2.4 输出解析器 3. 相关应用3.1 RAG 参考文献 1. 基础知识 六大组件 模型&#xff08;Models&#xff09;&#xff1a;包含各大语言模型的LangChain接口…