Filter实现用户名验证

①:使用Filter,判断用户名是否为空,为空的话返回登录画面。

1,web.xml:
1.<filter>
2.  <filter-name>SecurityServlet</filter-name>
3.  <filter-class>com.msm2.filter.MyFilter</filter-class>
4. </filter>
5. 
6. <filter-mapping>
7.  <filter-name>SecurityServlet</filter-name>
8.  <url-pattern>/*</url-pattern>
9. </filter-mapping>

2,spring-mvc.xml:
1<bean id="loginController" class="com.msm2.controller.LoginController" /> 
2.<bean id="mainController" class="com.msm2.controller.MainController" /> 
3.<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
4.  <property name="mappings">
5.    <props>
6.      <prop key="login">loginController</prop>
7.      <prop key="userLogin">mainController</prop>
8.    </props>
9.  </property>
10.</bean>

package com.msm2.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.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;

public class MyFilter extends HttpServlet implements Filter {
	
	private static final long serialVersionUID = 1L;
	private static final Logger LOGGER = Logger.getLogger(MyFilter.class);
	String encode = null;

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
			throws IOException, ServletException {

		arg0.setCharacterEncoding(encode);
		arg1.setCharacterEncoding(encode);
		
	        HttpServletRequest request = (HttpServletRequest) arg0;
		HttpServletResponse response = (HttpServletResponse) arg1;
		HttpSession session = request.getSession(true);
		
        String url=request.getRequestURI(); 
        if (url.indexOf("login")<0){
        	// 不是login画面
        	System.out.println("不是login画面");
        	if (request.getParameter("userId") ==null || "".equals(request.getParameter("userId"))) {
        		// 不是login画面并且用户名为null
        		System.out.println("不是login画面并且用户名为null");
        		response.sendRedirect(request.getContextPath() + "/login");
        	} else {
        		System.out.println("不是login画面但是用户名不为null");
        		// 不是login画面但是用户名不为null
        		arg2.doFilter(arg0, arg1);
        	}
			
		} else {
			// login画面
			System.out.println("login画面");
			arg2.doFilter(arg0, arg1);
		}
   

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		encode = "utf-8";
	}

}

写的虽然简单,但是初步实现了目标,以后对Filter理解的更深,再进一步记录。
        
原文地址:https://www.cnblogs.com/ysloong/p/6074881.html