springboot使用者登入攔截
阿新 • • 發佈:2019-01-06
首先先寫個攔截器
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.security.auth.login.LoginContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginContextInterceptor implements HandlerInterceptor {
private static final Logger LOGGER = LoggerFactory.getLogger(LoginContextInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// TODO Auto-generated method stub
LOGGER.info("------preHandle------");
System.out.println("ContextPath" + request.getContextPath());
System.out.println("getRequestURI" + request.getRequestURI());
//獲取session
HttpSession session = request.getSession(true );
//判斷使用者ID是否存在,不存在就跳轉到登入介面
if (session.getAttribute(Constant.USER_NAME) == null) {
String uri = request.getRequestURI();
if (uri.startsWith("/client")) {
response.sendRedirect(request.getContextPath() + "/client/loginInit");
} else {
response.sendRedirect(request.getContextPath() + "/loginInit");
}
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}
}
然後自己寫個配置類
package com.yuanh.mes.config;
import com.yuanh.mes.interceptor.LoginContextInterceptor;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ResourceUtils;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
//@EnableWebMvc
@ComponentScan
public class WebConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware {
private ApplicationContext applicationContext;
public WebConfig(){
super();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");
registry.addResourceHandler("/templates/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/templates/");
super.addResourceHandlers(registry);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
//攔截規則:除了excludePathPatterns中地址,其他都攔截判斷
registry.addInterceptor(new LoginContextInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login","/loginInit","/error", "/client/login", "/client/loginInit", "/proOrderReport/list");
super.addInterceptors(registry);
}
}
ok了,就是這麼簡單