您的位置:首页 > 编程语言 > Java开发

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

2017-09-28 19:18 501 查看

声明:

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

10.1更新:

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

设置自己的拦截规则。即继承HandlerInterceptor,不用把它注册为bean,因为拦截器只能在拦截器链中。这就要用第二步。

把拦截器添加到拦截器链中。 继承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;

@Configuration
public 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

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

<
4000
/article>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring 结构 class bean