1. 程式人生 > >springmvc+mybatis登入驗證2.0(更新了使用session來進行儲存使用者值,登出後清除session),並進行了攔截器的設定

springmvc+mybatis登入驗證2.0(更新了使用session來進行儲存使用者值,登出後清除session),並進行了攔截器的設定

本次在之前的文章實現登入註冊的基礎上又進行了新的升級,主要是採用了session和攔截器來對功能進行完善

新的Controller層

package lyb.com.controller;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import lyb.com.dao.UserMapper;
import lyb.com.model.User;

@Controller
public class UserController {
	@Autowired
	private UserMapper mapper;
	
	@RequestMapping("index")
	public String index(){
		return "login";
	}
	
	@RequestMapping("login")
	public String login(User u,HttpSession session){
		String username = u.getUsername();
		String password = u.getPassword();
		User user = mapper.selectUser(username);
		session.setAttribute("users", user);
		if(user!=null){
			if(password.equals(user.getPassword())){
				return "redirect:list";
			}else{
				return "error";
			}
		}else{
			return "error";
		}
	}
	
	@RequestMapping("list")
	public ModelAndView userList(ModelAndView m){
		List list = new ArrayList();
		list = mapper.selectList();
		m.addObject("list",list);
		m.setViewName("list");
		return m;
	}
	
	@RequestMapping("edit")
	public ModelAndView edit(ModelAndView m,Integer id){
		User user = mapper.selectByPrimaryKey(id);
		//編輯方法
			m.setViewName("edit");
			m.addObject("user",user);
			return m;
	}
	
	@RequestMapping("save")
	public String save(ModelAndView m,User user){
		mapper.updateByPrimaryKeySelective(user);
		return "redirect:list";
	}
	
	@RequestMapping("add1")
	public ModelAndView add1(ModelAndView m){
		m.setViewName("add");
		return m;
	}
	@RequestMapping("add")
	public String add(User user){
		mapper.insert(user);
		return "redirect:list";
	}
	@RequestMapping("delete")
	public String delete(Integer id){
		mapper.deleteByPrimaryKey(id);
		return "redirect:list";
	}
	@RequestMapping("exit")
	public ModelAndView exit(HttpSession session,ModelAndView m){
		session.invalidate();
		m.setViewName("redirect:index");
		return m;
	}
}

在controller層的login方法中設定了一個session來儲存使用者實體

在exit方法中設定了一個invalidate來銷燬session

使用攔截器需要進行兩個地方的配置

1.建立一個UserInterceptor的攔截器類

package lyb.com.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;



public class UserInterceptor implements HandlerInterceptor  {  
    
	  private final String users = "users";  
	  //private  Test t;
	  //攔截前處理  
	  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {  
	    Object sessionObj = request.getSession().getAttribute(users);  
	    if(sessionObj!=null) {   
	      return true;  
	    }   
	    response.sendRedirect("index");  
	    return false;  
	  }  
	  //攔截後處理  
	  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object obj, ModelAndView mav) throws Exception { }  
	  //全部完成後處理  
	  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception e) throws Exception { }  
	}  
2.在springmvc的配置檔案中增加攔截器的屬性
<mvc:interceptors>  
            <!-- 多個攔截器,順序執行 -->  
            <mvc:interceptor>  
                <mvc:mapping path="/*"/> 
                 <mvc:exclude-mapping path="/index"/>
                 <mvc:exclude-mapping path="/login"/>   
                <bean class="lyb.com.interceptor.UserInterceptor"></bean>  
            </mvc:interceptor>  
        </mvc:interceptors> 
這裡除了index和login外其他的請求在沒有session的情況下都被攔截


下一步實現首頁的預設訪問頁面