【WEEK13】 【DAY2】Shiro第二部分【中文版】

2024.5.21 Tuesday
接上文【WEEK13】 【DAY1】Shiro第一部分【中文版】

15.3.SpringBoot整合

15.3.1.新建shiro-springboot模块

(位于springboot-08-shiro下)
按照惯例修改settings中的maven,jdk和Java版本,Project Structure中的jdk和Java版本。修改pom中的springframework版本到2.7.13(这里一定要记得修改,否则怎么重启都会显示:“类文件具有错误的版本 61.0, 应为 52.0”,本质上不是jdk版本不同导致的,是spring-boot-starter-parent的版本不适配),删除无关文件
在这里插入图片描述

15.3.2.新建index.html

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

15.3.3.新建controller文件夹

新建MyController.java

package com.P40.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";
    }
}

15.3.4.测试连接

运行ShiroSpringbootApplication.java
访问:http://localhost:8080/
在这里插入图片描述

15.3.5.修改pom.xml

添加依赖:Shiro-spring,不能使用当前最新版2.0.0,会报错
Maven Repository: org.apache.shiro » shiro-spring (mvnrepository.com)

<!--shiro整合spring的包-->
<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-spring -->
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>1.4.1</version>
</dependency>

15.3.6.新建config文件夹

15.3.6.1.新建ShiroConfig.java

在这里插入图片描述

package com.P40.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.context.annotation.Configuration;

@Configuration
public class ShiroConfig {
    //ShiroFilterFactoryBean
    @Bean
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager defaultWebSecurityManager){
        ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
        //要配置什么:点击进入ShiroFilterFactoryBean源码查看
        //设置安全管理器
        bean.setSecurityManager(defaultWebSecurityManager);
        return bean;
    }

    //DefaultWebSecurityManager
    @Bean(name = "securityManager") //给这个类起别名,便于ShiroFilterFactoryBean调用
    public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){    //获取UserRealm,但是这里好像不需要使用注解,可以直接调用
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        //默认的DefaultWebSecurityManager类的类名是defaultWebSecurityManager,只是在这里修改成securityManager

        //关联UserRealm
        securityManager.setRealm(userRealm);
        return securityManager;
    }

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

    //创建时顺序是相反的(从real->DefaultWebSecurityManager->ShiroFilterFactoryBean)
}

15.3.6.2.新建UserRealm.java

package com.P40.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是一个bean
//自定义的UserRealm,必须要继承AuthorizingRealm方法,然后implement methods(alt+insert)
public class UserRealm extends AuthorizingRealm {
    //授权
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        System.out.println("do doGetAuthorizationInfo 授权");
        return null;
    }

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

15.3.7.新建user文件夹

15.3.7.1.新建add.html

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>add</h1>
</body>
</html>

15.3.7.2.新建update.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>update</h1>
</body>
</html>

15.3.8.修改MyController.java

添加跳转到add和update页面的控制器方法

package com.P40.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";
    }
}

15.3.9.修改index.html

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

<hr>    <!--在 HTML 页面中创建一条水平线-->
<a th:href="@{/user/add}">add</a>  |   <a th:href="@{/user/update}">update</a>
<!--a标签定义超链接,用于从一个页面链接到另一个页面-->
</body>
</html>

15.3.10.重启

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值