package com.hehenian.app.filter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.util.StringUtils;
import com.hehenian.biz.common.account.dataobject.AccountUserDo;
/**
* @Description
* 用来跳转到统一的登录认证中心
* 系统需要配置登录URL
* 并且将用户访问的url传递给登录中心, 登录成功后跳回用户想访问的url
* 参数名称: fromUrl
* @author huangzl QQ: 272950754
* @date 2015年6月15日 下午2:47:40
* @Project hehenian-lend-app
* @Package com.hehenian.app.filter
* @File UserLoginFilter.java
*/
public class UserLoginFilter implements Filter {
protected String loginView;
protected String mobileLoginView;
Logger logger = Logger.getLogger(this.getClass());
public String getLoginView() {
return loginView;
}
public void setLoginView(String loginView) {
this.loginView = loginView;
}
public String getMobileLoginView() {
return mobileLoginView;
}
public void setMobileLoginView(String mobileLoginView) {
this.mobileLoginView = mobileLoginView;
}
public UserLoginFilter() {}
public void destroy() {}
/**
*
* 过滤掉不需要登录就可以查看的url
* 其他url 都先检测是否登录过, 没有重定向到登录中心
*
*
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse) response;
String uri = req.getRequestURI();
//String fromUrl =req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+uri;
HttpSession session = req.getSession();
setParameter(session, new HashMap(req.getParameterMap()));
if (uri.endsWith("/index") ||uri.indexOf("/app/mhk/")!=-1||uri.indexOf("/app/elend/")!=-1||uri.indexOf("/app/group/")!=-1||uri.indexOf(".ico")!=-1 ||uri.indexOf("/app_res/")!=-1){//uri.endsWith("/index") ||uri.indexOf("/app/mhk/")!=-1||uri.indexOf("/app/elend/")!=-1||uri.indexOf("/app/group/")!=-1
chain.doFilter(request, response);
}else {
AccountUserDo user = (AccountUserDo)session.getAttribute("user");
logger.info("uri:=======>"+uri);
String loginCenterUrl = loginView;
if (user == null || user.getId()==null) {
if (uri.indexOf("/view/mobile/")>-1){
loginCenterUrl= mobileLoginView;
}else if(uri.endsWith("/getAuth.do")){
loginCenterUrl=("http://dkdev.hehenian.cn/login/login/getAuth.do");
}
logger.info("loginView:=======>"+loginCenterUrl);
StringBuffer urlTemp=req.getRequestURL();
String urlTemp1=req.getQueryString();
uri = urlTemp + ";s="+ session.getId();
uri = java.net.URLDecoder.decode(uri, "utf-8");
resp.sendRedirect(loginCenterUrl + ";s="+ session.getId()+"?fromUrl=" + uri);
} else {
chain.doFilter(request, response);
}
}
}
private void setParameter(HttpSession session, Map map){
if (map!=null && map.size()>0){
Map temp=(Map)session.getAttribute("parameterMap");
Map newMap=new HashMap();
if(temp!=null) {
newMap.putAll(temp);
}
if(map!=null) {
newMap.putAll(map);
}
session.setAttribute("parameterMap", newMap);
}
}
public void init(FilterConfig fConfig) throws ServletException {
ServletContext sc=fConfig.getServletContext();
sc.setAttribute("doLoginView", loginView);
sc.setAttribute("mobileLoginView", mobileLoginView);
}
}