package com.ufgov.filter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.regex.Pattern;
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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.google.gson.Gson;
import com.ufgov.entity.SysRole;
import com.ufgov.util.DateUtils;
import com.ufgov.util.MemcachedUtils;
public class SecurityFilter implements Filter{
private static final Logger log = Logger.getLogger(SecurityFilter.class);
private static SecurityUrl surl;
public void init(FilterConfig filterConfig) throws ServletException {
@SuppressWarnings("resource")
ApplicationContext ac = new FileSystemXmlApplicationContext("classpath:conf/applicationContext.xml");
surl= (SecurityUrl)ac.getBean("securityUrl");
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
SysRole role = MemcachedUtils.getRoleInfo(req);
chain.doFilter(request, response);
String userRole = role.getRoleType();
log.info(" --当前用户角色-- "+userRole);
String requrl = req.getRequestURI();
log.info("当前请求的URL: "+requrl);
List<String> urlroles = surl.getUrlroles();
Iterator<String> it = urlroles.iterator();
String reg = ur.split("&")[0].trim();
if(!Pattern.matches(reg, requrl)){
String needrole = ur.split("&")[1].trim();
log.info("The url need role is = "+needrole);
if(needrole.indexOf(userRole)!=-1){
chain.doFilter(request, response);
Map<String,Object> map = new HashMap<String,Object>();
map.put("message", "The user do not have access to this resource,Please contact the administrator!");
map.put("type", "No permission!");
response.setContentType("application/json;charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.write(gson.toJson(map));