上文中我们在项目中配置了java日志。接下来我们要在项目中配置拦截器,filter和跨域操作。
我这里只是大概的记录一下如何配置在项目中配置,具体的使用后边用到的时候会详细的介绍。
一:配置filter
我这里直接在代码中演示:
编写一个Filter类
在项目根目录下的src\main\java\com\springbootblog目录下创建filter目录下创建TestFilter.java,代码如下:
package com.springbootblog.filter;
import javax.servlet.*;
import java.io.IOException;
public class TestFilter implements Filter
{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("TestFilter.doFilter111111111111111111111111111111111111111111111111111111111111111111");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
通过JavaConfig将Filter配置进去
在src\main\java\com\springbootblog目录下创建config目录下创建FilterConfig.java,代码如下:
package com.springbootblog.config;
import com.springbootblog.filter.TestFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean<TestFilter> registrationBean(){
FilterRegistrationBean<TestFilter> filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(new TestFilter());
filterRegistrationBean.addUrlPatterns("/*"); //setUrlPatterns() 一次性将映射关系配置进去
filterRegistrationBean.setOrder(1);
filterRegistrationBean.setName("filter");
return filterRegistrationBean;
}
}
重启服务器,在浏览器中访问:http://localhost:1021/test
控制台输出:
TestFilter.doFilter111111111111111111111111111111111111111111111111111111111111111111
说明filter在SpringBoot中启用完成。
最后放一下filter需要的文件的目录结构:
二:配置拦截器
Filter 过滤器是可以拦截所有东西,但是 SpringBoot 拦截器只能拦截 Controller
我们需要自定义编写一个拦截器。
拦截器需要实现接口HandlerInterceptor,在项目根目录下的src\main\java\com\springbootblog目录下创建interceptor目录下创建TestInterceptor.java,代码如下:
package com.springbootblog.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestInterceptor implements HandlerInterceptor
{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
{
// 执行拦截操作
System.out.println("TestInterceptor.preHandle");
// 代码往下进行
return true;
}
}
拦截器到这里就编写完成了,我们需要在javaconfig中将其配置进去。
在项目根目录下的src\main\java\com\springbootblog目录下创建config目录下创建InterceptorConfig.java,代码如下:
package com.springbootblog.config;
import com.springbootblog.interceptor.TestInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry)
{
// 注册拦截器 并配置拦截所有方法 除了count方法
registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**").excludePathPatterns("/count");
}
}
接下来我们在AdminController.java中测试,代码如下:
package com.springbootblog.controller;
import com.springbootblog.dao.AdminDao;
import com.springbootblog.pojo.Admin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
public class AdminController
{
/**
* 定义一个静态常量日志对象
*/
private static final Logger logger = LoggerFactory.getLogger(AdminController.class);
// 自动装载(dao接口注入)
@Autowired
private AdminDao adminDao;
@RequestMapping("test")
@ResponseBody
public List<Admin> selectByExample()
{
System.out.println(121);
// 输出日志信息
logger.info("selectByExample,info:");
logger.trace("selectByExample,trace:");
logger.debug("selectByExample,debug:");
logger.warn("selectByExample,warn:");
logger.error("selectByExample,error:");
List<Admin> list = adminDao.selectByExample(null);
return list;
}
@RequestMapping("count")
@ResponseBody
public int count()
{
System.out.println(3533);
int num = (int)adminDao.countByExample(null);
return num;
}
}
重启服务器,我们在浏览器中输入:http://localhost:1021/test
浏览器中输出了一段json(数据库返回的数据)
控制台输出:
TestFilter.doFilter111111111111111111111111111111111111111111111111111111111111111111
3533
这部分是没有问题的,我们将count方法排除了,不需要拦截
我们再在浏览器中输入:http://localhost:1021/test
浏览器中输出了一数字:15
控制台输出:
TestFilter.doFilter111111111111111111111111111111111111111111111111111111111111111111
TestInterceptor.preHandle
121
通过上方输入,我们发现拦截器起作用了。
三:配置跨域
这部分就比较简单了。
在项目根目录下的src\main\java\com\springbootblog目录下创建config目录下创建CrosConfig.java,代码如下:
package com.springbootblog.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
/**
* 跨域配置
*/
@Configuration
public class CrosConfig extends WebMvcConfigurationSupport
{
@Override
protected void addCorsMappings(CorsRegistry registry)
{
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS")
.allowedHeaders("*")
.exposedHeaders("access-control-allow-headers",
"access-control-allow-methods",
"access-control-allow-origin",
"access-control-max-age",
"X-Frame-Options")
.allowCredentials(false).maxAge(3600);// 超时时间
super.addCorsMappings(registry);
}
}
跨域这就配置完成了。
以上大概就是springboot项目拦截器、filter、跨域的基本配置。
有好的建议,请在下方输入你的评论。