简单的Filter登录过滤
1、方法要继承HttpFilter
2、在复写方法doFilter中,获取session,从而获取用户信息user,最后进行user判空操作
3、如user为空,设置错误消息到request域中(方便前台取用),并利用
request.getRequestDispatcher(“/xxx/login.jsp”).forward(request, response);方法进行页面转发
Ps: response.sendRedirect("/user/login.jsp");是重定向方法
4、当满足Filter条件时,放行资源 chain.doFilter(request, response);
springboot架构
/**
* 检查访问OrderClientServlet的请求,是否已登录
*/
public class LoginFilter extends HttpFilter {
@Override
public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
if(user==null) {
String errorMsg = "订单操作必须登录!!------";
request.setAttribute("errorMsg", errorMsg);
//登录失败 转发到login.html页面让用户继续登录
request.getRequestDispatcher("/pages/user/login.jsp").forward(request, response);
//重定向方法
//response.sendRedirect("/pages/user/login.jsp");
}else {
// 你打开一个页面当满足过滤器的条件的时候,他就会继续执行你打开页面时候的操作
chain.doFilter(request, response);
}
}
}
简单的HandlerInterceptor登录过滤
1、request.getContextPath(),从项目的/路径查找
ssm架构
//public class LoginInterceptor implements HandlerInterceptor {这个实现有三种方法,用下面的默认适配器,方法使用灵活
public class LoginInterceptor extends HandlerInterceptorAdapter{ //默认适配器模式。
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
HttpSession session = request.getSession();
User user = (User)session.getAttribute("user");
if(user == null) {
// 从项目的 / 路径,查找login页面
response.sendRedirect(request.getContextPath()+"/login.htm");
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
}*/
}
继续在springmvc.xml中配置
1、<mvc:mapping path="/**"/>:对 / ** 路径进行拦截
2、<mvc:exclude-mapping path="/index.htm"/>:排除哪些页面不进行拦截
如果不拦截的页面过多可以统一放到common路径下,示例如下:
<mvc:exclude-mapping path="/common/ **"/>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/index.htm"/>
<mvc:exclude-mapping path="/login.htm"/>
<mvc:exclude-mapping path="/doLogin.do"/>
<bean id="loginInterceptor" class="com.xxx.xxx.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>