10.1更 spring boot 登录拦截(附上代码)

来源:互联网 发布:苹果电脑视频制作软件 编辑:程序博客网 时间:2024/06/05 21:06

声明:

自己对拦截器的理解目前仅处于会用的阶段,没有太多理解,这里仅提供代码,有需要的先拿去用。更多分解等日后再说。


10.1更新:

spring boot设置拦截器总共就两步

  1. 设置自己的拦截规则。即继承HandlerInterceptor,不用把它注册为bean,因为拦截器只能在拦截器链中。这就要用第二步。
  2. 把拦截器添加到拦截器链中。 继承WebMvcConfigurerAdapter。并添加@Configuration注解

目录结构

这里写图片描述

AuthorizationInterceptor类

//你的拦截规则就要写在这里package com.qingyunqifu.interceptor;import com.qingyunqifu.domain.Users;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class AuthorityIntercptor implements HandlerInterceptor{    //不拦截xxx请求    private static final String[] IGNORE_URL = {"/loginForm", "/login"};    /*    * 本方法在进行处理器拦截用的,该方法在COntroller处理之前进行调用    * 本方法返回值为ture,拦截器才会继续往下执行,该方法返回false时,整个请求就代表结束了。    * */    @Override    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {        System.out.println("在请求处理来之前,也就是在controller函数调用之前");        System.out.println("普通拦截器正在保护您的安全");        //flag 登录标志        boolean flag = false;        //获取请求路径进行判断        String servletPath = httpServletRequest.getServletPath();        for (String s : IGNORE_URL) {            if (servletPath.contains(s)) {                flag = true;                break;            }        }        //拦截请求        if (!flag) {            //获取session中的user            Users user = (Users) httpServletRequest.getSession().getAttribute("user");            if (user == null) {                System.out.println("你好坏,快去登录");                httpServletRequest.setAttribute("message", "请先登录再来");                httpServletRequest.getRequestDispatcher("login").forward(httpServletRequest, httpServletResponse);            }else {                System.out.println("放行!!!");                flag = true;            }        }        return flag;    }    @Override    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {        System.out.println("在请求处理后,但在试图渲染之前调用");    }    @Override    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {        System.out.println("渲染结束后再调用");    }}

WebConfig类

package com.qingyunqifu.interceptor;import org.apache.catalina.filters.RemoteIpFilter;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;@Configurationpublic class WebConfig extends WebMvcConfigurerAdapter {    @Bean    public RemoteIpFilter remoteIpFilter() {        return new RemoteIpFilter();    }    @Bean    public LocaleChangeInterceptor localeChangeInterceptor() {        return new LocaleChangeInterceptor();    }    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(new AuthorityIntercptor()).addPathPatterns("/**");        super.addInterceptors(registry);    }}

番外:

附上github地址:https://github.com/1500256797/springboot-demo


更多关于拦截器的用法,以后有机会再补充进来。

原创粉丝点击