发表于: 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
评论