• SpringBoot整合Shiro环境搭建与配置拦截器


    目录 

    1、导入jar包,thymeleaf和shiro-spring

    2、测试是否连接成功 

    3、创建config文件夹,编写配置类ShiroConfig类

    3.1、首先创建realm对象,在config文件夹里创建UserRealm类

    3.3、配置DefaultWebSecurityManager,并且关联UserRealm 

    3.4、创建ShiroFilterFactoryBean

    4、编写好配置类之后简单测试一下

    4.1、templates文件夹下创建一个user文件夹,写两个页面add.html和update.html

    4.2、在MyController类里面写跳转url,

    4.3、在index.html页面中,写两个a链接,href地址就是映射地址 

    4.4、效果

    5、在上述基础上显示拦截器

    5.1、添加shiro的内置过滤器(拦截器)

    5.1.1、效果 

    5.2、由于没有loign页面,我们就写一个 

    5.2.1、login.html编写

    5.2.2、在MyController里面写一个去到登录页的跳转

    5.2.3、在ShiroConfig里面设置登录请求

    5.3、效果 

    6、代码

    6.1、pom.xml

    6.2、MyController

    6.3、UserReal 

    6.4、ShiroConfig


    在之前的springboot-07-shiro项目里创建一个springboot项目shiro-springboot,选择添加spring-web依赖

    1、导入jar包,thymeleaf和shiro-spring

    2、测试是否连接成功 

    在templates文件夹下写一个index.html页面

    然后再创建controller文件夹,编写MyController类跳转页面

    3、创建config文件夹,编写配置类ShiroConfig类

    ShiroConfig类里面需要有3个核心要素:ShiroFilterFactoryBean;DefaultWebSecurityManager;创建realm对象,需要自定义一个类。

    3个核心要素的配置顺序倒着配置

    3.1、首先创建realm对象,在config文件夹里创建UserRealm类

    这个类里面基本就是Security里面的写授权和认证的地方

    3.2、把UserRealm这个对象 bean 放到Configuration里面

    3.3、配置DefaultWebSecurityManager,并且关联UserRealm 

    3.4、创建ShiroFilterFactoryBean

    并关联DefaultWebSecurityManager,设置安全管理器

    4、编写好配置类之后简单测试一下

    4.1、templates文件夹下创建一个user文件夹,写两个页面add.html和update.html

    4.2、在MyController类里面写跳转url,

    就是在这个类里面加两个方法

    4.3、在index.html页面中,写两个a链接,href地址就是映射地址 

    4.4、效果

    5、在上述基础上显示拦截器

    5.1、添加shiro的内置过滤器(拦截器)

    5.1.1、效果 

    5.2、由于没有loign页面,我们就写一个 

    步骤:写login.html ==> 在controller里面编写toLogin方法 ==> 在ShiroConfig里面设置登录请求

    5.2.1、login.html编写

    5.2.2、在MyController里面写一个去到登录页的跳转

    5.2.3、在ShiroConfig里面设置登录请求

    5.3、效果 

    6、代码

    6.1、pom.xml

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <parent>
    6. <groupId>org.springframework.bootgroupId>
    7. <artifactId>spring-boot-starter-parentartifactId>
    8. <version>2.7.4version>
    9. <relativePath/>
    10. parent>
    11. <groupId>com.zhougroupId>
    12. <artifactId>shiro-springbootartifactId>
    13. <version>0.0.1-SNAPSHOTversion>
    14. <name>shiro-springbootname>
    15. <description>shiro-springbootdescription>
    16. <properties>
    17. <java.version>1.8java.version>
    18. properties>
    19. <dependencies>
    20. <dependency>
    21. <groupId>org.apache.shirogroupId>
    22. <artifactId>shiro-springartifactId>
    23. <version>1.4.1version>
    24. dependency>
    25. <dependency>
    26. <groupId>org.thymeleafgroupId>
    27. <artifactId>thymeleaf-spring5artifactId>
    28. dependency>
    29. <dependency>
    30. <groupId>org.thymeleaf.extrasgroupId>
    31. <artifactId>thymeleaf-extras-java8timeartifactId>
    32. dependency>
    33. <dependency>
    34. <groupId>org.springframework.bootgroupId>
    35. <artifactId>spring-boot-starter-webartifactId>
    36. dependency>
    37. <dependency>
    38. <groupId>org.springframework.bootgroupId>
    39. <artifactId>spring-boot-starter-testartifactId>
    40. <scope>testscope>
    41. dependency>
    42. dependencies>
    43. <build>
    44. <plugins>
    45. <plugin>
    46. <groupId>org.springframework.bootgroupId>
    47. <artifactId>spring-boot-maven-pluginartifactId>
    48. plugin>
    49. plugins>
    50. build>
    51. project>

    6.2、MyController

    1. package com.zhou.controller;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.ui.Model;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. @Controller
    6. public class MyController {
    7. @RequestMapping({"/", "/index"})
    8. public String toIndex(Model model){
    9. model.addAttribute("msg", "hello,shiro");
    10. return "index";
    11. }
    12. @RequestMapping("/user/add")
    13. public String add(){
    14. return "user/add";
    15. }
    16. @RequestMapping("/user/update")
    17. public String update(){
    18. return "user/update";
    19. }
    20. @RequestMapping("/toLogin")
    21. public String toLogin(){
    22. return "login";
    23. }
    24. }

    6.3、UserReal 

    1. package com.zhou.config;
    2. import org.apache.shiro.authc.AuthenticationException;
    3. import org.apache.shiro.authc.AuthenticationInfo;
    4. import org.apache.shiro.authc.AuthenticationToken;
    5. import org.apache.shiro.authz.AuthorizationInfo;
    6. import org.apache.shiro.realm.AuthorizingRealm;
    7. import org.apache.shiro.subject.PrincipalCollection;
    8. // 自定义的UserRealm extends AuthorizingRealm
    9. public class UserRealm extends AuthorizingRealm {
    10. // 授权
    11. @Override
    12. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
    13. System.out.println("执行了====>授权doGetAuthorizationInfo");
    14. return null;
    15. }
    16. // 认证
    17. @Override
    18. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
    19. System.out.println("执行了====>认证doGetAuthorizationInfo");
    20. return null;
    21. }
    22. }

    6.4、ShiroConfig

    1. package com.zhou.config;
    2. import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
    3. import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
    4. import org.springframework.beans.factory.annotation.Qualifier;
    5. import org.springframework.beans.factory.annotation.Required;
    6. import org.springframework.context.annotation.Bean;
    7. import org.springframework.context.annotation.Configuration;
    8. import java.util.LinkedHashMap;
    9. import java.util.Map;
    10. @Configuration
    11. public class ShiroConfig {
    12. // ShiroFilterFactoryBean 第三步
    13. @Bean
    14. public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager getDefaultWebSecurityManager){
    15. ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
    16. // 关联 DefaultWebSecurityManager 设置安全管理器
    17. bean.setSecurityManager(getDefaultWebSecurityManager);
    18. // 添加shiro的内置过滤器
    19. /*
    20. * anon:无需认证就可以访问
    21. * authc:必须认证了才能访问
    22. * user:必须拥有 记住我 功能才能用
    23. * perms:拥有对某个资源的权限才能访问
    24. * role:拥有某个权限才能访问
    25. *
    26. * */
    27. Map filterMap = new LinkedHashMap<>();
    28. filterMap.put("/user/add", "authc"); // 表示被认证的用户才能访问这个页面,之前没有配置这行代码就是可以直接点进add页面
    29. filterMap.put("/user/update", "authc");
    30. bean.setFilterChainDefinitionMap(filterMap);
    31. // 设置登录的请求
    32. bean.setLoginUrl("/toLogin");
    33. return bean;
    34. }
    35. // DefaultWebSecurityManager 第二步
    36. @Bean(name = "securityManager")
    37. public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){
    38. DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
    39. // 关联UserRealm
    40. securityManager.setRealm(userRealm);
    41. return securityManager;
    42. }
    43. // 创建realm对象,需要自定义一个类 第一步
    44. @Bean
    45. public UserRealm userRealm(){
    46. return new UserRealm();
    47. }
    48. }

  • 相关阅读:
    vscode篇---vscode连接docker环境
    c#对控件的操作无效,子线程调用主线程的控件
    点云从入门到精通技术详解100篇-点云表面几何特征检测及其应用(续)
    【python】路径管理+路径拼接问题
    jQuery提供的获取元素位置的接口方法
    JS-谈谈你所理解的闭包
    分布式协议笔记
    electron 通信总结
    探花交友_第1章_项目介绍以及实现登录功能_第2节_项目介绍
    Java- IO流
  • 原文地址:https://blog.csdn.net/qq_43880100/article/details/127395422