自定义filter如下
package com.imooc.mall.filter;
import com.imooc.mall.common.ApiRestResponse;
import com.imooc.mall.common.Constant;
import com.imooc.mall.exception.ImoocMallExceptionEnum;
import com.imooc.mall.model.pojo.Category;
import com.imooc.mall.model.pojo.User;
import com.imooc.mall.service.UserService;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import javax.servlet.http.HttpSession;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
/**
* 描述: 管理员校验过滤器
*/
public class AdminFilter implements Filter {
@Autowired
UserService userService;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacs");
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpSession session = request.getSession();
User currentUser = (User) session.getAttribute(Constant.IMOOC_MALL_USER);
if (currentUser == null) {
PrintWriter out = new HttpServletResponseWrapper(
(HttpServletResponse) servletResponse).getWriter();
out.write("{\n"
+ " \"status\": 100077777,\n"
+ " \"msg\": \"NEED_LOGIN\",\n"
+ " \"data\": null\n"
+ "}");
out.flush();
out.close();
return;
}
//校验是否是管理员
boolean adminRole = userService.checkAdminRole(currentUser);
if (adminRole) {
filterChain.doFilter(servletRequest, servletResponse);
} else {
PrintWriter out = new HttpServletResponseWrapper(
(HttpServletResponse) servletResponse).getWriter();
out.write("{\n"
+ " \"status\": 10009,\n"
+ " \"msg\": \"NEED_ADMIN\",\n"
+ " \"data\": null\n"
+ "}");
out.flush();
out.close();
}
}
@Override
public void destroy() {
}
}
注册filter的config.java文件如下
package com.imooc.mall.config;
import com.imooc.mall.filter.AdminFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 描述: Admin过滤器的配置
*/
@Configuration
public class AdminFilterConfig {
@Bean
public AdminFilter adminFilter() {
return new AdminFilter();
}
@Bean(name = "adminFilterConf")
public FilterRegistrationBean adminFilterConfig() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(adminFilter());
filterRegistrationBean.addUrlPatterns("/admin/category/*");
filterRegistrationBean.addUrlPatterns("/admin/product/*");
filterRegistrationBean.addUrlPatterns("/admin/order/*");
filterRegistrationBean.setName("adminFilterConf");
return filterRegistrationBean;
}
// @Bean
// public FilterRegistrationBean<AdminFilter> requestContextFilterFilterRegistrationBean() {
// FilterRegistrationBean<AdminFilter> registrationBean = new FilterRegistrationBean<>();
// registrationBean.setFilter(new AdminFilter());
// registrationBean.addUrlPatterns("/*");
// registrationBean.addUrlPatterns("/admin/category/*");
// registrationBean.addUrlPatterns("/admin/product/*");
// registrationBean.addUrlPatterns("/admin/order/*");
// registrationBean.setName("adminFilterConf");
// registrationBean.setOrder(2);
// return registrationBean;
// }
}
一直不能注册,检查发现filter没有执行。。。
修改方法:
改FilterRegistrationBean
package com.imooc.mall.config;
import com.imooc.mall.filter.AdminFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 描述: Admin过滤器的配置
*/
@Configuration
public class AdminFilterConfig {
// @Bean
// public AdminFilter adminFilter() {
// return new AdminFilter();
// }
//
// @Bean(name = "adminFilterConf")
// public FilterRegistrationBean adminFilterConfig() {
// FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
// filterRegistrationBean.setFilter(adminFilter());
// filterRegistrationBean.addUrlPatterns("/admin/category/*");
// filterRegistrationBean.addUrlPatterns("/admin/product/*");
// filterRegistrationBean.addUrlPatterns("/admin/order/*");
// filterRegistrationBean.setName("adminFilterConf");
// return filterRegistrationBean;
//
// }
@Bean
public FilterRegistrationBean<AdminFilter> requestContextFilterFilterRegistrationBean() {
FilterRegistrationBean<AdminFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new AdminFilter());
registrationBean.addUrlPatterns("/*");
registrationBean.addUrlPatterns("/admin/category/*");
registrationBean.addUrlPatterns("/admin/product/*");
registrationBean.addUrlPatterns("/admin/order/*");
registrationBean.setName("adminFilterConf");
registrationBean.setOrder(2);
return registrationBean;
}
}
执行了过滤器。。。