許可權控制-禁止普通登入使用者通過直輸URL方式訪問系統中其它自己不具備許可權的模組
1.描述
一個普通使用者,只有單點登入的許可權,通過一些工具獲取到系統的其它模組的URL ,在位址列直接輸入,訪問,我們在一些按鈕做了一些控制,但是部分不具有操作機會的頁面還是會展現出來,不影響功能,但是也需要做優化處理
2.程式碼(JAVA)
@WebFilter(urlPatterns = { "/*" })//(採用註解方式配置filter) public class MainFilter implements Filter{
@Override public void destroy() { }
@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { this.do_filter_inner(request, response, chain); }
private void go_timeout_proc(ServletResponse response) throws IOException{ HttpServletResponse res = (HttpServletResponse) response; res.sendRedirect("超時跳轉頁面"); }
private void do_filter_inner(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 編碼處理, this.do_encode(request, response);// //手動輸入的不合規範的URL路徑,沒有許可權,在此限制 if(!this.do_pass_right(request, response)){ this.go_righterr_proc(response);//跳轉到提示頁 return; } //其他的filter處理
//超時處理 this.go_timeout_proc(response); }
private boolean do_pass_right(ServletRequest request, ServletResponse response) throws IOException{ HttpServletRequest httpRequest = (HttpServletRequest) request; String conString = ""; //獲取父url conString = httpRequest.getHeader("REFERER"); if("".equals(conString) || null==conString){ //當前請求url String servletPath = httpRequest.getServletPath(); //index頁,(本工程是部署到Tomact下,並在ROOT目錄下配置index檔案可通過ip直接訪問,所以需放行index頁,超時頁也要放行) if(servletPath.contains("index.jsp") || servletPath.contains("login.jsp")|| servletPath.contains("timeout.jsp")){ //沒有父url的但是可放行的url路徑,此處放行的如有必要可自行在 //"index.jsp"放行, return true; //返回true為允許通過 }else { //沒有獲取到父 url ,判斷為非法訪問,無系統許可權,返回fasle,,做錯誤許可權攔截 Debug.info("父URL:["+conString+"]為null,不是系統內部訪問,無許可權"); return false; } } return true;//返回true,,只要是有父url的,都不做處理,繼續前行,後續處理 } private void go_righterr_proc(ServletResponse response) throws IOException{ HttpServletResponse res = (HttpServletResponse) response; res.sendRedirect("/**/right_error.jsp");//跳轉到許可權錯誤提示頁 }
@Override public void init(FilterConfig arg0) throws ServletException { }
3.可參考原文連結