package com.mossle.spi.device; import java.io.IOException; import javax.annotation.Resource; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DeviceFilter implements Filter { private DeviceConnector deviceConnector; public void init(FilterConfig filterConfig) throws ServletException { } public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws ServletException, IOException { String deviceId = this.getCookie((HttpServletRequest) request, "SECURITY_DEVICE_ID"); if (deviceId == null) { filterChain.doFilter(request, response); return; } DeviceDTO deviceDto = deviceConnector.findDevice(deviceId); if ((deviceDto != null) && "disabled".equals(deviceDto.getStatus())) { HttpServletResponse res = (HttpServletResponse) response; res.sendError(HttpServletResponse.SC_FORBIDDEN); return; } filterChain.doFilter(request, response); } public String getCookie(HttpServletRequest request, String key) { Cookie[] cookies = request.getCookies(); if (cookies == null) { return null; } for (Cookie cookie : cookies) { if ((cookie == null) || (cookie.getName() == null)) { continue; } if (cookie.getName().equals(key)) { return cookie.getValue(); } } return null; } @Resource public void setDeviceConnector(DeviceConnector deviceConnector) { this.deviceConnector = deviceConnector; } }