Spring-boot中配置拦截器(Filter)

本文介绍Spring Boot相比Spring4的优势,包括自动配置简化、内置Tomcat容器等特点,并详细阐述了Spring Boot中如何实现拦截器机制,从自定义过滤器的创建到注册配置全过程。

Spring-boot相较于Spring4的优势:
1、简化了Spring4的配置流程,进行自动配置,降低了项目搭建的复杂度(Spring4的配置非常复杂,各种XML、 JavaConfig、hin处理起来比较繁琐)
2、不需要单独安装Tomcat容器,maven打包jar,跑起来就是一个网站,
注:
1、Spring4 :一个“引擎”
2、Spring MVC:基于servlet的web开发框架
3、Spring-boot:基于Spring4的条件注册的一个快速开发整合包
另外Spring Boot只是承载者,辅助你简化项目搭建过程的。如果承载的是WEB项目,使用Spring MVC作为MVC框架,那么工作流程和你上面描述的是完全一样的,因为这部分工作是Spring MVC做的而不是Spring Boot

由于Spring boot 中优化了配置流程,所以省去一些xml、javaConfig等配置
例如:web.xml文件不用了
如何实现拦截器机制:
1、首先写一个自定义的过滤器(Filter),用于session处理,如判断用户是否登陆

@Configuration
public class SessionManagerFilter extends HttpServlet implements Filter {

2、注册拦截器:

@Configuration
public class FilterConfiguration {
    @Autowired
    private SessionManagerFilter sessionManagerFilter;
    @Bean
    public FilterRegistrationBean filterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
                                 System.out.println("sssssssss>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        //注入过滤器
        registration.setFilter(sessionManagerFilter);
        //拦截规则
        registration.addUrlPatterns("/cou/*");
        //过滤器名称
        registration.setName("sessionManagerFilter");
        //是否自动注册 false 取消Filter的自动注册
        registration.setEnabled(true);
        //过滤器顺序
        registration.setOrder(1);
        Collection<String> url = registration.getUrlPatterns();
        System.out.println(JSONObject.toJSON(url));
        return registration;
    }

注册拦截器中进行注册过滤器,其次,针对该过滤器可以进行过滤路径配置、设定执行优先级等

当服务启动时,首先加载配置文件,其次,装配注册过滤器类,同时初始化过滤器,当请服务器发出请求时,首先通过注册过滤器类判断请求路径,如果没有被拦截则可以到过滤器中

### 如何配置 `druid-spring-boot-starter` 示例教程最佳实践 #### 一、引入依赖 为了使用 Druid 数据库连接池,在项目的 `pom.xml` 文件中加入如下 Maven 依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${最新版本号}</version> </dependency> ``` 此操作确保了项目能够利用到 Druid 提供的功能[^1]。 #### 二、基础配置项设置 编辑 `application.properties` 或者 `application.yml` 文件来完成基本参数设定。以下是 YAML 格式的例子: ```yaml spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8 username: root password: 123456 # 初始化大小,最小,最大 initial-size: 5 min-idle: 5 max-active: 20 # 配置获取连接等待超时的时间 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 300000 validation-query: SELECT 'x' test-while-idle: true test-on-borrow: false test-on-return: false pool-prepared-statements: true max-pool-prepared-statement-per-connection-size: 20 filters: stat,wall,log4j connection-properties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 ``` 上述配置涵盖了数据库连接的核心属性以及性能优化建议,比如通过调整连接池的最大活动数 (`max-active`) 和初始化数量 (`initial-size`) 来适应应用的实际负载情况;启用 SQL 合并统计功能以便更好地监控慢查询等[^2]。 #### 三、高级特性集成 对于更复杂的场景,可以考虑开启更多高级选项,如 Web 控制台支持用于实时查看和分析 JDBC 性能指标。这通常涉及到额外的安全性和权限控制措施。 要激活该模块,需添加以下配置至应用程序文件内: ```properties # 开启Druid内置监控页面访问路径,默认为/druid/* spring.datasource.druid.web-stat-filter.enabled=true # 设置允许访问的IP白名单(逗号分隔),留空表示不限制 spring.datasource.druid.web-stat-filter.allow= # 禁止某些URL模式被过滤器处理 spring.datasource.druid.web-stat-filter.deny=/denyUrlPattern ``` 此外,还可以自定义 AOP 切面拦截特定业务逻辑前后的行为,从而进一步增强系统的可观测性[^3]。 #### 四、测试验证 最后一步是编写单元测试案例以确认所有配置都按预期工作正常。可以通过 JUnit 结合 Spring TestContext Framework 实现自动化测试流程。 ```java @SpringBootTest(classes = Application.class) public class DataSourceTest { @Autowired private DataSource dataSource; @Test public void contextLoads() throws SQLException { assertNotNull(dataSource); System.out.println("dataSource=" + dataSource); Connection conn = null; try { conn = dataSource.getConnection(); System.out.println("conn=" + conn); System.out.println("JDBC URL:" + conn.getMetaData().getURL()); System.out.println("Username:" + conn.getMetaData().getUserName()); } finally { if (null != conn) { conn.close(); } } } } ``` 这段代码片段展示了如何注入 `DataSource` 对象并通过它建立新的数据库连接实例来进行简单的连通性检测[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值