这个身份拦截器的作用是为了防止用户没有登录,在URL中输入地址就去访问那么系统页面。比如:
没有拦截器的情况下:
直接在URL重中输入first.action直接进入到了页面。
其实不能这样的,我们都没有登录,怎么可以直接进入系统呢。
我们变成编写的身份验证器实现的就是这么一个效果:输入first.action之后:
会自动跳转到登录界面。
下面给出具体的实现:
我们来给吃具体的实现,想法是,我们自己写一个继承HandlerInterceptor的类,当做拦截器,然后在springmvc配置文件中配置它。
好的,我接下来给出具体代码:
package yycg.base.action.HandlerInterceptor; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import yycg.base.pojo.vo.ActiveUser; import yycg.base.process.context.Config; import yycg.util.ResourcesUtil; /** * * @ClassName: LoginInterceptor * @Description: 拦截器,主要是拦截用户在没有登录的情况下去访问。需要在springmvc中进行配置。 * @author A18ccms a18ccms_gmail_com * @date 2016年11月17日 下午4:05:28 * */ /* * * 这个拦截器还要在SpirngMvc中配置才可以用的。 * * * */ public class LoginInterceptor implements HandlerInterceptor { /** * * 执行时间:进入到action方法之前, * 使用场景:用于用户的认证,用户的授权拦截。 * */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session=request.getSession();
ActiveUser activeUser=(ActiveUser)session.getAttribute(Config.ACTIVEUSER_KEY);//从session中取出用户对象,之前已经存入了session了。 if(activeUser!=null)//说明从Session中取出来用户对象,那么就放行 { return true; } //如果activeUser是空的,那就是说明用户没有登录。那么我们就要检测用户的要浏览的是不是公共的界面,如果是的话,也可以放行。 List<String> open_urls=ResourcesUtil.gekeyList(Config.ANONYMOUS_ACTIONS); //Config.ANONYMOUS_ACTIONS就是资源的名字就是anonymousActions。说明要从这里去取值, //得到用户的url String url=request.getRequestURI(); //遍历资源文件里面是不是包含了我们要访问的那个url.如果包含了,放行。 for(String open_url:open_urls) { if(url.indexOf(open_url)>=0)//>=0说明找到位置了 { return true; //返回true就是继续执行, } } //如果上面的都没哟满足,那么我们就要拦截下来,跳转到用户的登录界面 request.getRequestDispatcher("/WEB-INF/jsp/base/login.jsp").forward(request, response); return false; } /** * 执行的时机:进入到Action方法,在返回modelAndView之前执行。 * 使用场景:在这里统一对返回的数据进行处理,比如统一添加菜单,导航等 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } /** * 执行时间:action方法执行完成,已经返回modelAndview,执行 * 使用的场景:统一处理系统异常,在这里统一记录系统日志,监控action的执行的时间,在preHandle记录开始的时间,在afterCompletion记录结束的时间 * * * * */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
打开springmvc.xml配置文件:
加入这么一段:
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="yycg.base.action.HandlerInterceptor.LoginInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
这样拦截器就配置好了。
我们在url里面输入刚才的first.action之后:
发现:
说明成功了。