Spring Mvc那点事---(19)Spring Mvc过滤器Filter实现登陆验证

     上一节我们演示了过滤器Filter的基本用法,这一节我们通过实例来看下过滤器怎么实现用户登陆判断,如果用户登陆成功跳转到首页,如果用户未登陆,跳转到登陆页面。

 1.用户登陆

   首先我们天添加两个页面,一个是登陆页面login.jsp,一个是登陆成功后的index.jsp.

在login.jsp中我们添加两个用户名和密码文本输入文本框

 index.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>Insert title here</title>
</head>
<body>
 欢迎你,登陆成功
</body>
</html>


login.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>Insert title here</title>
</head>
<body>
   <form action="<%=request.getContextPath()%>/Home/userLogin"  method="post">
   用户名:<input type="text" name="username"> 
   <Br>
  密码: <input type="password" name="pwd"> 
  
  <input type="submit" value="登陆">
  
  </form>
  
  
</body>
</html>


 在后台我们添加controller方法

 

@Controller
@RequestMapping("/Home")
public class HomeController {

		
	@RequestMapping(value="index")
	public String Index()
	{
		        
		return "index";
	}
	
	
	@RequestMapping(value="login")
	public String Login()
	{
		return "login";
		
	}
	
	@RequestMapping(value="userLogin")
	public String UserLogin(HttpServletRequest request,HttpServletResponse respnose,HttpSession httpSession) throws IOException
	{
		//登陆成功后,写入session
		String userName=request.getParameter("username");
		String pwd=request.getParameter("pwd");
		System.out.println("登陆成功!"+"--"+userName);
		httpSession.setAttribute("username", userName);
	    return "redirect:/Home/index";  
	}
}
}

   我们添加过滤器filterFirst

 

package com.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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class filterFirst implements Filter {

	private  FilterConfig config;
	
	public void destroy() {
		// TODO Auto-generated method stub
		 System.out.println("destroy");
	}

	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException {
		// TODO Auto-generated method stub
		 System.out.println("doFilter");
		 
		 HttpServletRequest request=(HttpServletRequest)arg0;
		 
		 HttpServletResponse response=(HttpServletResponse)arg1;
		 
		 //获取初始化参数
	    String para=config.getInitParameter("nofilterpath");
	    System.out.println(para);
		 
		 if(request.getRequestURI().indexOf("login")!=-1||request.getRequestURI().indexOf("Home/userLogin")!=-1)
		 {
			 arg2.doFilter(arg0, arg1);
			 return;
		 }
		 
		 if(request.getSession().getAttribute("username")==null)
		 {
			 
			response.sendRedirect(request.getContextPath()+"/Home/login");
		 }
		 else
		 {
			 
			 arg2.doFilter(arg0, arg1);
		 }
		 
	}

	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
        System.out.println("init");
        config=arg0;
        
	}

}

配置web.xml

  <!-- 自定义过滤器 -->
    <filter>  
        <filter-name>firstfilter</filter-name>  
        <filter-class>com.filter.filterFirst</filter-class>  
        <!-- 设置初始化参数 -->
         <init-param>  
            <param-name>nofilterpath</param-name>  
            <param-value>login</param-value>  
        </init-param>  
        
    </filter>  
    <filter-mapping>  
        <filter-name>firstfilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  


 2.初始化参数

   在filter中我们可以设置初始化参数,在web.xml中通过<init-parm>来进行设置,param-name表示参数名称,parm-value表示参数值

  在filter中,我们可以获取参数,使用FilterConfig进行获取,在init中进行初始化

 

public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
        System.out.println("init");
        config=arg0;
        
	}

 

 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值