過濾器filter使用之案例二
阿新 • • 發佈:2019-02-11
案例二:使用filter過濾器控制訪問許可權
本案例主要內容如下:
在電商管理系統中,客戶沒有登入,則不能訪問購物車頁面,同理沒有登陸的客戶,也不可以將商品新增到購物車。
實現的方式有多種,以filter過濾器最為方便
1. 自定義LoginFilter類,實現Filter介面
package cn.com.mp.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebFilter("/LoginFilter" )
public class LoginFilter implements Filter {
public LoginFilter() {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession();
// 要過濾的uri
System.out.println("過濾uri===" + req.getRequestURI());
//name是登陸的時候session.setAttribute("name")
if (session == null || session.getAttribute("name") == null) {
//重定向到未登入提示頁面 res.sendRedirect(req.getContextPath() + "/jsp/front/notLoginTip.jsp");
return;
}
// 繼續訪問其他資源
chain.doFilter(req, res);
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
2. web.xml中配置LoginFilter,這一步相當重要,若配置有錯,則可能filter過濾無效或者過濾太嚴格
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>cn.com.mp.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<!-- 要過濾的路徑或者要控制的路徑 cart.jsp為購物車頁面 --->
<url-pattern>/jsp/front/cart.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<!-- 要過濾的路徑或者要控制的路徑 AddCartServlet為新增到購物車的路徑--->
<url-pattern>/AddCartServlet</url-pattern>
</filter-mapping>
Filter過濾的路徑可以同時配置多個,根據專案的不同,配置自己所需要控制的路徑即可。
3. notLoginTip.jsp 未登入提示頁面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>未登入提示</title>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<script type="text/javascript">
alert("親,您還沒有登陸,請登陸後訪問!");
window.location.href="<%=path%>"+"/jsp/front/login.jsp";
</script>
</head>
<body>
</body>
</html>
4. 購物車頁面及程式碼
程式碼:
<a href="checkout.jsp"
style="font-size: 16px; color: white; margin-left: 10px; text-decoration: none;">購物車</a>
5. 新增購物車圖片及程式碼
<a href="../../AddCartServlet" class="add-cart item_add">新增至購物車</a>
總結:
合理的使用filter過濾可以為我們訪問許可權控制,得到和方便的解決,當然也可以使用shiro框架完成,這個在後續的部落格中後寫到。以上便是筆者使用filter過濾器控制權限訪問的案例,如有不正確之處,還請多多指教。