SSH框架网上商城项目第框架网上商城项目第18战之过滤器实现购物登录功能的判断战之过滤器实现购物登录功能的判断
主要为大家详细介绍了SSH框架网上商城项目第18战:过滤器实现购物登录功能的判断,感兴趣的小伙伴们可以参考一下
上一节我们做完了购物车的基本操作,但是有个问题是:当用户点击结算时,我们应该做一个登录的判断,判断用户有没有登录,没有登
录的话,得首先让用户登录。这就用到了过滤器的技术了,过滤器是专门拦截页面请求的,它与拦截器的原理差不多,拦截器是专门拦截
Action请求的,所以各有所用,如果直接是页面的跳转,不经过Action的话,我们只要写一个拦截器即可,如果需要跳转到一个Action处
理,那么我们就得写一个拦截器。
1. 登录跳转的原理登录跳转的原理
先说一下实现原理:写一个过滤器,在web.xml中配置一下需要拦截的url,这样的话,当用户的请求url中满足配置的话,就会执行我们自
己写的过滤器,在过滤器中,我们首先检查session中有没有登录过的user,如果没有说明没有登录,然后拿到用户想要访问的页面url和参
数,重新拼接成url放到session中,然后重定向到登陆页面,登录后跳转到Action处理,处理完后跳转到session中保存的url,即原来用户
想去的地方。这样就完成了登陆的跳转了。
2. 登录跳转的实现登录跳转的实现
当现实购物车页面后,我们点击结账,它会自动跳转到订单确认的页面,如下:
但是此时如果用户没登录,我们肯定不能直接跳到订单确认页面,所以我们要用过滤器拦下来判断一下,下面写过滤器:
2.1 过滤器的实现过滤器的实现
过滤器的实现要实现Filter接口,并覆写三个方法即可,其实我们主要要覆写其中一个方法即可。如下:
public class UserFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
// 判断当前session是否有用户信息
if(req.getSession().getAttribute("user") == null) {
//保存当前客户想要去的url地址
String goURL = req.getServletPath();//获得用户想要去的地址
String param = req.getQueryString(); //获得地址中携带的参数
if(param != null) {
goURL = goURL + "?" + param; //重新拼好请求地址+参数
}
//把当前客户想要访问的地址,存储到session中
req.getSession().setAttribute("goURL", goURL);
//非法请求,跳转到登陆页面
req.getSession().setAttribute("error", "非法请求,请登录!");
res.sendRedirect(req.getContextPath() + "/ulogin.jsp");
} else {
//如果有下一个过滤器则跳转,否则直接到目标页面
chain.doFilter(request, response);
}
}
@Override
public void init(FilterConfig config) throws ServletException {
// TODO Auto-generated method stub
}
}
从实现的代码来看,主要腹泻了doFilter方法,在方法里,首先判断当前session中是否有用户的信息,如果没有,说明没有登录,那么要
先将用户想要去的url地址和地址中的参数保存下来,拼成新的url存到session中,然后重定向到登陆页面,让用户登陆。如果session中有
用户信息,说明已经登录过了,直接放行到用户想去的页面。
写好了Filter,别忘了在web.xml中配置要过滤的url,配置如下:
评论0
最新资源