1.springboot
package com.itheima.reggie.filter;
import com.alibaba.fastjson.JSON;
import com.itheima.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.AntPathMatcher;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter(filterName = "LoginCheckFilter", urlPatterns = ("/*"))
@Slf4j
public class LoginCheckFilter implements Filter {
//创建路径比较器
public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
//获取当前请求的路径
String requestURI = request.getRequestURI();
//创建不需要登录的字符串数组
String[] urls = {
"/employee/login",
"/employee/logout",
"/backend/**",
"/front/**"
};
//调用比对方法进行对比
boolean b = checkUrl(urls, requestURI);
//如果为true,则放行
if (b) {
log.info("检测到用户不需要登录:{}", requestURI);
filterChain.doFilter(request, response);
return;
}
//如果false则需要判断session是否为空,不为空则放行
if (request.getSession().getAttribute("employee") != null) {
log.info("检测到用户已经登录:{}", request.getSession().getAttribute("employee"));
filterChain.doFilter(request, response);
return;
}
log.info("检测到用户未登录:{}", requestURI);
//为空则通过字符输出流给前端传递信息,返回前端跳转页面
response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
}
//定义比对方法
public boolean checkUrl(String[] urls, String uri) {
for (String url :
urls) {
boolean match = PATH_MATCHER.match(url, uri);
if (match) {
return true;
}
}
return false;
}
}
//在启动类中加入过滤器类的扫描
package com.itheima.reggie;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@Slf4j
@ServletComponentScan
public class ReggieApplication {
public static void main(String[] args) {
SpringApplication.run(ReggieApplication.class,args);
log.info("项目启动了");
}
}
2.web
//过滤登录
package com.itheima.filter;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
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.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet Filter implementation class LoginFilter
*/
@WebFilter("/*")
public class LoginFilter extends HttpFilter implements Filter {
public LoginFilter() {
super();
}
public void destroy() {
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
String reqStr = req.getRequestURI();
if (needCheck(reqStr)) {
HttpSession session = req.getSession();
Object obj=session.getAttribute("user");
if (obj==null) {
HttpServletResponse resp = (HttpServletResponse)response;
resp.sendRedirect("/web0820/loginServlet");
}else {
chain.doFilter(request, response);
}
}else {
chain.doFilter(request, response);
}
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
private boolean needCheck(String requestURI) {
List<String> needLoginUILList = Arrays.asList("addcourseServlet","deleteServlet","upd ateServlet","courseShow");
for(String url:needLoginUILList) {
if(requestURI.contains(url)) {
return true;
}
}
return false;
}
}
//过滤编码
package com.itheima.filter;
import java.io.IOException;
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.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
/**
* Servlet Filter implementation class EncodeFilter
*/
@WebFilter("/EncodeFilter")
public class EncodeFilter extends HttpFilter implements Filter {
/**
* @see HttpFilter#HttpFilter()
*/
public EncodeFilter() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
// pass the request along the filter chain
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}