发表于: 2017-11-09 23:00:29

2 745


今天完成的内容:

(1)了解三个器:监听器,过滤器,拦截器。

Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。

web.xml中配置如下,很简单:


<!-- 配置应用监听器  -->   

  <listener>   

      <listener-class>dc.gz.listeners.MyServletContextListener</listener-class>   

  </listener> 

这样配置好了之后,以后在web应用中就可以通过ServletContext取得BasicDataSource对象,从而获取与数据库的连接,提高性能,方便使用。

Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断等。其工作原理是,只要在web.xml文件配置好要拦截的客户端请求,它都会帮拦截到请求,此时就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当web应用停止或重新部署的时候才销毁。

拦截器是在面向切面编程中应用的,就是在service或者一个方法前调用一个方法,或者在方法后调用一个方法,是基于JAVA的反射机制。

(2)任务五。

在login接口下定义一个cookie,在拦截时做登陆验证。

String resules= TypeUtil.bytesToHexString(result);
Cookie cookie = new Cookie("token",resules);
cookie.setMaxAge(60*60*24*7);//保留7天

验证需要解析cookie,验证是否有用户登录了,就需要拦截器了。

public class LoginInterceptor implements HandlerInterceptor {
@Autowired
   private UserService userService;

   public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {

Cookie[] cookie = httpServletRequest.getCookies();
       if (cookie != null) {
for (int i = 0; i < cookie.length; i++) {
if (cookie[i].getName().equals("token")) {
String token = cookie[i].getValue();
                   byte[] tk = TypeUtil.hexStringToByte(token);
                   byte[] tk1 = DES.decrypt(tk, "12345678");
                   String tk2 = new String(tk1);
                   String id = "";
                   String time = "";
                   for (int j = 0; j < tk2.length(); j++) {
char c = tk2.charAt(j);
                       if (c == '=') {
for (int k = j + 1; k < tk2.length(); k++)
time = time + tk2.charAt(k);
                           break;
                       }
id = id + c;
                   }
if (userService.select(Long.parseLong(id)) != null) {

return true;
                   }
}
}
}
httpServletRequest.getSession();
       String contextpath = httpServletRequest.getScheme() + "://" + httpServletRequest.getServerName() + ":" + httpServletRequest.getServerPort() + httpServletRequest.getContextPath();
       String uri = contextpath + "/login";
       httpServletResponse.sendRedirect(uri);
       return true;
   }

public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

}

public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

}
}

拦截器工作的表现是,在首页跳转职业页面的时候,如果没有登录,就会自动跳转到登录界面。

明天的计划:准备小课堂,完成任务五。

遇到的问题:之前不知道拦截器是如何工作的。

收获:以上。

禅道:http://task.ptteng.com/zentao/task-view-10689.html


返回列表 返回列表
评论

    分享到