java 使用过滤器实现登录拦截处理

网友投稿 298 2022-12-04

java 使用过滤器实现登录拦截处理

目录滤器实现登录拦截处理一、什么是过滤器二、工作原理及生命周期三、过滤器使用filter简易实现登录功能拦截LoginFlitercontroller结果图

滤器实现登录拦截处理

一、什么是过滤器

过滤器是处于客户端与服务器资源文件之间的一道过滤网(驻留在服务器端的Web组件),在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应

二、工作原理及生命周期

举个例子 当我们登录系统可以访问到页面,当退出登录后,要访问就必须重新登录,这就是过滤器起到的作用。当我们访问某个接口时,过滤器会拦截请求,判断当前用户是否是登录状态,若登录则放行访问,若未登录则返回指定页面(通常为登录页或一个客户友好的提示页)

这个过程包含了过滤器的生命周期:

1.实例化

2.初始化

3.执行过滤操作(包括访问前对request操作和返回时对response的操作处理)

4.销毁

三、过滤器使用

在springboot项目简单使用过滤器进行登录拦截处理

1.实现过滤器

public class MyFilter implements Filter {

private static final String CURRENT_USER = "current_user";

//配置白名单

protected static List patterns = new ArrayList();

//静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次

static {

patterns.add(Pattern.compile("/index"));

patterns.add(Pattern.compile("/login"));

patterns.add(Pattern.compile("/register"));

}

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;

HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;

HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(httpResponse);

String url = httpRequest.getRequestURI().substring(httpRequest.getContextPath().length());

if (isInclude(url)) {

//在白名单中的url,放行访问

filterChain.doFilter(httpRequest, httpResponse);

return;

}

if (SessionUtils.getSessionAttribute(CURRENT_USER) != null) {

//若为登录状态 放行访问

filterChain.doFilter(httpRequest, httpResponse);

return;

} else {

//否则默认访问index接口

wrapper.sendRedirect("/index");

}

}

@Override

public void destroy() {

}

//判断当前请求是否在白名单

private boolean isInclude(String url) {

for (Pattern pattern : patterns) {

Matcher matcher = pattern.matcher(url);

if (matcher.matches()) {

return true;

}

}

return false;

}

}

2.注册过滤器

@Configuration

public class WebConfig {

/**

* 配置过滤器

* @return

*/

@Bean

public FilterRegistrationBean someFilterRegistration() {

FilterRegistrationBean registration = new FilterRegistrationBean();

registration.setFilter(myFilter());

//拦截/*的访问 多级匹配(springboot 过滤器/*以及匹配 /**多级匹配)

registration.addUrlPatterns("/*");

registration.setName("myFilter");

return registration;

}

/**

* 创建一个bean

* @return

*/

@Bean(name = "myFilter")

public Filter myFilter() {

return new MyFilter();

}

}

3.运行项目

访问/index,会发现没有被拦截,返回正确结果

在未登录状态,访问/update接口,会被拦截跳转至/index页

在登录状态,访问/update接口,可以访问

这里也可以在程序debug看下。简单的过滤器功能完成。

常用过滤器及其使用后续再来学习。

filter简易实现登录功能拦截

暑期项目实习第八课, filter简易实现登录功能拦截

LoginFliter

public class LoginFliter implements Filter {

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) servletRequest;

HttpServletResponse response = (HttpServletResponse) servletResponse;

HttpSession session = request.getSession();

User user = (User)session.getAttribute("user");

String uri = request.getRequestURI();

System.out.println(uri.indexOf("findAll.do"));

System.out.println(uri.indexOf("login.do"));

if(user==null && uri.indexOf("login.do")==-1){

response.sendRedirect(request.getContextPath()+"/");

}else {

filterChain.doFilter(request,response);

}

}

@Override

public void destroy() {

}

}

controller

@RequestMapping("/login.do")

public ModelAndView login(User user, HttpSession session){

boolean flag = userService.login(user.getName(),user.getPassword());

ModelAndView modelAndView = new ModelAndView();

if(flag){

session.setAttribute("user",user);

modelAndView.setViewName("../ok");

}else {

modelAndView.setVieSHmltZwName("../failure");

}

return modelAndView;

}

结果图

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot解决jar包冲突的问题,简单有效
下一篇:java实现简单的加减乘除计算器
相关文章

 发表评论

暂时没有评论,来抢沙发吧~