1. 程式人生 > >系統之登陸判斷與許可權

系統之登陸判斷與許可權

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