SpringBoot 手写自定义 登录拦截器Starter启动器,并使用自定义的启动类

开发步骤
1.新建一个普通的maven项目
在这里插入图片描述

2.自定义Starter启动器,最终项目结构如下
在这里插入图片描述

  1. 引入以下依赖
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.20</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
             <version>1.18.24</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
             <version>5.8.2</version>
        </dependency>

4.创建属性绑定文件AuthorityProperties

package com.example;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
//引入配置前缀为spring.auth的配置文件
@ConfigurationProperties(prefix = "spring.auth")
@Data
public class AuthorityProperties {

    //是否开启验证
    boolean enabled;
    //拦截路径
    String pathPatterns;
    //不拦截的路径
    String excludePathPatterns;
}

5.创建自动配置类AuthorityAutoConfigruation

package com.example;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Import;

@ConditionalOnProperty(
        prefix = "spring.auth",
        value = "enabled",
        havingValue = "true", //spring.auth.enabled 值与 havingValue值对对比,相等则自动装载,不相等不装载。
        matchIfMissing = false
)
//注入拦截器的配置
@Import(WebConfig.class)
public class AuthorityAutoConfigruation {
}

6.创建登录拦截器AuthorityInteceptor

package com.example;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AuthorityInteceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        //String token = request.getHeader("token");
        //String token = request.getParameter("token"); // xx.com?token=we8827sd
        System.out.println("----------------同志,你被拦截了----------------- ");
        return true;
    }
}

7.注册拦截器WebConfig

package com.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Import(AuthorityProperties.class)
//设置优先级最高
@Order(Ordered.HIGHEST_PRECEDENCE)
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private AuthorityProperties authorityProperties;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        registry.addInterceptor(new AuthorityInteceptor())
                //拦截路径
                .addPathPatterns(authorityProperties.getPathPatterns())
                //排除路径
                .excludePathPatterns(authorityProperties.getExcludePathPatterns());

    }
}

8.配置自动配置
在resourecs文件目录下创建META-INF,并创建我们自己的spring.factories,并把我们的 MemberStaterAutoConfiguration 添加进去

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.AuthorityAutoConfigruation

9.打包,上传到阿里云效的制品仓库的非生产库-snapshot里面
9.1上传的前提条件,下载setting.xml,覆盖原来的maven setting.xml文件
在这里插入图片描述
9.2上传点击depoy自动上传到实仓
在这里插入图片描述
10.导入打包上传好的依赖
在这里插入图片描述
11开始使用,新建spring boot项目,引入刚刚那个依赖
在这里插入图片描述
12.编写测试demoController

package com.example.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class demoController {

    @GetMapping("/api/name")
    public String getName(){
        return "李老师";
    }
    @GetMapping("/login")
    public String login(){
        return "请登录";
    }
}

13配置application.properties


#spring.auth.enabled 值与 havingValue值对对比,相等则自动装载,不相等不装载。
spring.auth.enabled=true
#拦截所有
spring.auth.pathPatterns=/api/*
#放行的路径
spring.auth.excludePathPatterns=/login 

14.测试结果
14.1测试接口/api/name,启动器使用成功
在这里插入图片描述
14.2测试接口/login,测试成功
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

great-sun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值