系統之登陸判斷與許可權
阿新 • • 發佈:2018-12-10
1.配置攔截器
<mvc:interceptors>
<bean class="com.dy.admin.interceptor.AdminLoginHandlerInterceptor"/>
</mvc:interceptors>
2.建立登陸判斷攔截器的實現類
public class LoginHandlerInterceptor extends HandlerInterceptorAdapter{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String path = request.getServletPath(); if ("/".equals(path)) return true; if (path.matches(".*/((assets)|(js)|(images)|(common)|(public)).*")) return true; for (String newPath : list) { if (path.matches(newPath)) { return true; } } if (request.getSession().getAttribute(Constant.SESSION_USER) == null) { System.out.println("---------------"); response.sendRedirect(request.getContextPath() + Constant.LOGIN_URL); return false; } return true; } /** * 免攔截的url */ public static List<String> list = new ArrayList<String>(); static { //備案平臺管理 list.add("****"); } }
3.許可權控制
public class AdminLoginHandlerInterceptor extends LoginHandlerInterceptor { @Autowired private BaseService baseService; @Override @SuppressWarnings("unchecked") public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { //用來控制權限 super.postHandle(request, response, handler, modelAndView); } }
總結遇到的需要強勢記住的:
1.需要實現HandlerInterceptorAdapter介面的方法:
preHandle:在呼叫controller之前呼叫
postHandle:preHandle返回為true時執行,為false該攔截鏈直接結束,在呼叫controller之後呼叫,在 DispatcherServlet之前 呼叫,可以對ModleAndView進行操作。
afterCompletion:在postHandle返回為true時呼叫,用來釋放資源。
2.request的路徑問題
1. getServletPath():獲取能夠與“url-pattern”中匹配的路徑,注意是完全匹配的部分,*的部分不包括。
2. getPageInfo():與getServletPath()獲取的路徑互補,能夠得到的是“url-pattern”中*d的路徑部分
3. getContextPath():獲取專案的根路徑
4. getRequestURI:獲取根路徑到地址結尾
5. getRequestURL:獲取請求的地址連結(瀏覽器中輸入的地址)
6. getServletContext().getRealPath(“/”):獲取“/”在機器中的實際地址
7. getScheme():獲取的是使用的協議(http 或https)
8. getProtocol():獲取的是協議的名稱(HTTP/1.11)
9. getServerName():獲取的是域名(xxx.com)
10. getLocalName:獲取到的是IP