公司有项目有个需求,就是希望可以写一个统一的权限管理。每次开发新项目的时候,可以通过添加依赖包进行权限的获取、验证。
至于为什么不使用aop,拦截器二使用过滤器,是因为在java中,如果3者同事存在,最先执行的是过滤器。
一、新建第三方过滤器jar包的jarone项目
权限管理模块,我是直接创建了spring boot项目,主要是为了方便调试(打包的时候,我会把启动类注释掉)
以下是目录结构:
编写ipFilter类:用于验证操作
public class ipFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("---->前");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("---->后");
}
}
编写ipFilterInitializer类:目的是为了把过滤器注册到容器中
@Configuration
public class ipFilterInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
}
@Bean
public FilterRegistrationBean<ipFilter> registrationIpBean(){
FilterRegistrationBean<ipFilter> bean = new FilterRegistrationBean<ipFilter>();
bean.setFilter(new ipFilter());
bean.setName("ipFilter");
bean.addUrlPatterns("/*");
bean.setOrder(1);
return bean;
}
}
编写PagePermissionController类,为了验证用户是否可以请求到这个jar的api接口
@RestController
@RequestMapping("/PagePermission")
public class PagePermissionController {
@GetMapping("/getButtons")
public List<String> getButtons(){
List<String> lstStr=new ArrayList<>();
lstStr.add("lyy");
lstStr.add("18");
lstStr.add("coder");
return lstStr;
}
}
直接启动这个项目,是可以进入到ipFilter过滤器,并可以正常访问接口。
接下来,打包成jar包。需要注意的是,mvn打包工具需要加个配置,如下是pom.xml文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lyy</groupId>
<artifactId>jarone</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>jarone</name>
<description>jarone</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
顺序执行命令:
mvn clean #清除由项目编译创建的target
mvn package -DskipTests #打包,跳过测试用例
mvn install #安装到本地仓库
二、新建spring boot业务项目usejarTwo,并引入jar包。
以下是目录结构 :需要在启动类中新增对jarone包的扫描(如果jarone所在包是usejartwo包的子集,则不需要)
编写LoginController类
@RestController
@RequestMapping("/Login")
public class LoginController {
@GetMapping("/logout")
public List<String> logout(){
List<String> lstStr=new ArrayList<>();
lstStr.add("lyy");
return lstStr;
}
}
启动项目,使用postman请求。可以发现可以请求到jarone中PagePermissionController的接口, 也可以访问到LoginController中的接口,且都进到了过滤器。
完成,后面就开始写在过滤器jar中修改请求内容以及相应内容。