我們有時候做的網站需要身份驗證,需要登錄以后才能訪問網站內部資源;但是地址欄里會顯示你訪問網站的地址,如果沒有登錄就直接輸入該網址也會直接進入到該網頁;這個時候我們還是需要做一個過濾器,當外部訪問網站內部資源時,先要經過這個這個過濾器,過濾器判斷你的session里面是否存在你這個用戶,如果有就跳轉成功,如果沒有就跳轉回登陸頁面。
以下是代碼和配置過程:
過濾器代碼:

public class IsLoginFilter implements Filter
{

public void destroy()
{
}
public void doFilter(ServletRequest request, ServletResponse response,

FilterChain filterChain) throws IOException, ServletException
{
System.out.println("every request pass here");
HttpServletRequest hrequest = (HttpServletRequest)request;
HttpSession session = hrequest.getSession();
User user = (User)session.getAttribute(Global.USER);

if(user==null)
{
//跳轉到登陸頁面
hrequest.getRequestDispatcher("/index.jsp").forward(request, response);
}
filterChain.doFilter(request, response);
}

public void init(FilterConfig config) throws ServletException
{
}
}
登錄以后的處理:

public class LoginServlet extends HttpServlet
{

public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
{
String userName = request.getParameter("username");
String passWord = request.getParameter("password");
System.out.println("userName | " + userName);
System.out.println("passWord | " + passWord);
User user = new User();
user.setUserName(userName);
user.setPassWord(passWord);
HttpSession session = request.getSession();
//登錄成功,把User放到session,然后在攔截器中判斷
session.setAttribute(Global.USER, user);
request.getRequestDispatcher("/admin/main.jsp").forward(request, response);
}
public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException,IOException
{
}
}
兩個類的配置過程:
<filter>
<filter-name>isLogin</filter-name>
<filter-class>com.bx.course.IsLoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>isLogin</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.bx.course.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
下面試一下登錄和未登錄兩種情況下的處理結果:
未登錄情況:

已登錄情況:
這個過濾器就能把未登錄而想進入admin目錄里面的main.jsp的用戶給阻止了。