權(quán)限校驗過濾器:
對應的servlet文件(login.jsp)中的doPost()方法中添加:
String returnUri=request.getParameter("return_uri");//return_uri是用戶訪問對應的頁面之前會訪問的頁面,通過這個值可以返回對應頁面。
在登錄成功(在登錄功能下)的判斷語句下添加:
request.getSession.setAttribute("flag","_success");//如果登錄成功,在當前對象中保存一個名稱為flag的變量的值為_success
if(returnUri!=null){
rd=request.getRequestDispatcher(returnUri);//RequestDispatcher rd=null;
rd.forward(request,response);
}else{
rd=request.getRequestDispatcher("/index.jsp");
rd.forward(request,response);
}
在登錄失敗的判斷語句下添加:
request.getSession.setAttribute("flag","_error");
reuqest.setAttribute("msg","用戶名或密碼錯誤");
rd=request.getRequestDispatcher("login.jsp");
rd.forward(request,response);
-》在對應的jsp文件中添加隱藏域:
<%if(request.getAttribute("return_uri")!=null){%>
<input type="hidden" name="return-uri" value="<%=request.getAttribute("return_uri")%>" />
<%}%>
-》新建過濾器 -》 編寫doFilter()方法中的業(yè)務邏輯:
HttpServletRequset req=(HttpServletRequest)request;
HttpServletResponse resp=(HttpServletResponse)response;
String sp=req.getServletPath();
HttpSession session=req.getSession();
String flag=(String)session.getAttribute("flag");
if(sp!=null&&(sp.equals.("/login.jsp")||sp.equals.("/index.jsp"))){//如果訪問的是默認頁面或登錄界面(即一些不需經(jīng)過權(quán)限授予即可以訪問的頁面),就直接將請求轉(zhuǎn)發(fā)給下一個組件處理
chain.doFilter(request,response);
}else{
if(flag!=null&&flag,equals("_success")){
chain.doFilter(request,response);
}else if(flag!=null&&flag,equals("_error")){
req.setAttribute("msg","登錄失敗,請重新登錄<br/>");
req.setAttribute("return_uri",sp);
RequestDispatcher ?rd=request.getRequestDispatcher("/login.jsp");
rd.forward(request,response);
}else{
req.setAttribute("msg","您尚未登錄,請登錄<br/>");
req.setAttribute("return_uri",sp);
RequestDispatcher ?rd=request.getRequestDispatcher("/login.jsp");
rd.forward(request,response);
}
}
-》接下來在web.xml配置一下(將編寫的過濾器等配置好):
<filter>
<filter-name>PermissionFilter</filter-name>
<filter-class>hp.filter.PermissionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PermissionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>