spring boot如何实现拦截器
项目中使用拦截器来保护页面的认证或是其他操作,比如只有认证过的用户才能访问相关页面。可以
在访问页面之前进行检测。这时候需要拦截器来操作,开发自写义拦截器,需要铺现HandlerInterceptor接口
并实现preHandle方法
package interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInerceptor implements HandlerInterceptor{
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// TODO Auto-generated method stub
boolean flag;
//决定会话是否在username
String username=(String)request.getSession().getAttribute("username");
//如果会话不存在username,那么定义向到 "/"
if (username== null) {
request.getRequestDispatcher("/").forward(request, response);
flag=false;
}
else {
flag=true;
}
return flag;
}
}
编写配置类,并extends WebMvcConfigurerAdapter,重写了addInterceptors方法
package ch07;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import interceptor.LoginInerceptor;
@SuppressWarnings("deprecation")
@Configuration
public class LoginInerceptorConfig extends WebMvcConfigurerAdapter{
@Override
public void addInterceptors(InterceptorRegistry registry) {
// TODO Auto-generated method stub
//一定要注单excludePathPatterns和addPathPatterns不要冲突了
registry.addInterceptor(new LoginInerceptor()).excludePathPatterns("/login","/").addPathPatterns("/*");
}
}
项目中使用拦截器来保护页面的认证或是其他操作,比如只有认证过的用户才能访问相关页面。可以
在访问页面之前进行检测。这时候需要拦截器来操作,开发自写义拦截器,需要铺现HandlerInterceptor接口
并实现preHandle方法
package interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInerceptor implements HandlerInterceptor{
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// TODO Auto-generated method stub
boolean flag;
//决定会话是否在username
String username=(String)request.getSession().getAttribute("username");
//如果会话不存在username,那么定义向到 "/"
if (username== null) {
request.getRequestDispatcher("/").forward(request, response);
flag=false;
}
else {
flag=true;
}
return flag;
}
}
编写配置类,并extends WebMvcConfigurerAdapter,重写了addInterceptors方法
package ch07;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import interceptor.LoginInerceptor;
@SuppressWarnings("deprecation")
@Configuration
public class LoginInerceptorConfig extends WebMvcConfigurerAdapter{
@Override
public void addInterceptors(InterceptorRegistry registry) {
// TODO Auto-generated method stub
//一定要注单excludePathPatterns和addPathPatterns不要冲突了
registry.addInterceptor(new LoginInerceptor()).excludePathPatterns("/login","/").addPathPatterns("/*");
}
}