filter过滤器(权限过滤)
/**
* 用于检测用户是否登陆的过滤器,如果未登录,则重定向到指的登录页面redirectURL
* 如果用户未登录,则重定向到指定的页面,URL不包括 ContextPath notCheckURLList
* 不做检查的URL列表,以分号分开,并且 URL 中不包括 ContextPath
*/
public class RightFilter implements Filter { protected FilterConfig filterConfig = null; private String redirectURL = null; private Set<String> notCheckURLList = new HashSet<String>(); @Override public void destroy() { // TODO Auto-generated method stub notCheckURLList.clear(); } @SuppressWarnings({ "unchecked", "unchecked" }) @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) resp; HttpServletRequest request = (HttpServletRequest) req; HttpSession session = request.getSession(); // if(checkRequestURIIntNotFilterList(request)){ if(request.getRequestURI().endsWith("/platformindex.jsp") && session.getAttribute("user") == null){ response.sendRedirect(request.getContextPath() + redirectURL); return; } chain.doFilter(req, resp); return; }else{ if(session.getAttribute("user") == null){ response.sendRedirect(request.getContextPath() + redirectURL); return; }else{ String strCurrentPath =request.getContextPath() + request.getServletPath() + (request.getPathInfo() == null ? "" : request.getPathInfo()); boolean isHaveRight = false; //询问访问的是否是用户菜单 List<SysModule> userMenuist=(List<SysModule>) session.getAttribute("userMenu"); if(userMenuist!=null && userMenuist.size()>0){ for(SysModule tempModel : userMenuist){ if(tempModel.getModuleLocation().equals(strCurrentPath)){ isHaveRight=true; break; } } if(isHaveRight){ chain.doFilter(req, resp); return; } } //系统权限菜单 List<SysRight> rightsList = (List<SysRight>) session.getAttribute("userRight"); if(rightsList!=null && rightsList.size()>0){ for(SysRight tempRight :rightsList){ if(tempRight.getSysModule().getModuleLocation().equals(strCurrentPath)){ isHaveRight=true; break; } } if(!isHaveRight){ //无权限 response.sendRedirect(request.getContextPath() + redirectURL); return; }else{ chain.doFilter(req, resp); return; } } } } } @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub this.filterConfig = filterConfig; redirectURL = filterConfig.getInitParameter("redirectURL"); String notCheckURLListStr = filterConfig.getInitParameter("notCheckURLList"); if (notCheckURLListStr != null) { String[] params = notCheckURLListStr.split(","); for (int i = 0; i < params.length; i++) { if(params[i].trim().endsWith(".jsp")){ notCheckURLList.add(params[i].trim()); }else{ makeNotCheckURLList(params[i].trim()); } } } } private void makeNotCheckURLList(String strDirPath){ String strFilePath = new RightFilter().getClass().getResource("/").getPath().replaceFirst("/", "").replaceAll("WEB-INF/classes/", "")+strDirPath; File notCheckfile = new File(strFilePath); File[] arrayFile = notCheckfile.listFiles(); if(arrayFile==null){ return; } for (int i = 0; i < arrayFile.length; i++) { if(arrayFile[i].isFile() && arrayFile[i].getName().endsWith(".jsp")){ notCheckURLList.add(strDirPath+arrayFile[i].getName()); } } } private boolean checkRequestURIIntNotFilterList(HttpServletRequest request) { String uri = request.getServletPath() + (request.getPathInfo() == null ? "" : request.getPathInfo()); return notCheckURLList.contains(uri); } }
----------
配置文件:
<filter> <filter-name>rightFilter</filter-name> <filter-class>cn.RightFilter</filter-class> <init-param> <param-name>redirectURL</param-name> <param-value>/page/login.jsp</param-value> <!-- 定位到login界面 --> </init-param> <init-param> <param-name>notCheckURLList</param-name><!-- 不检查用户访问路径 --> <param-value>/page/</param-value> </init-param> </filter> <filter-mapping> <filter-name>rightFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
public class CharacterEncodingFilter implements Filter { private String encoding = "UTF-8"; public void init(FilterConfig filterConfig) throws ServletException { String encoding = filterConfig.getInitParameter("encoding"); if (encoding != null) { this.encoding = encoding; } } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { if (encoding != null) { servletRequest.setCharacterEncoding(this.encoding); } filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { encoding = null; } }