1. 程式人生 > >如何在ssm框架下實現攔截器功能,只用登入成功才能訪問其他網頁?

如何在ssm框架下實現攔截器功能,只用登入成功才能訪問其他網頁?

springmvc檔案

	<!-- 配置攔截器 -->
	<mvc:interceptors>
                <mvc:interceptor>
                    <!-- /**表示所有url包括子url路徑 -->
                    <mvc:mapping path="/sys/**"/>
                    <bean class="cn.kgc.interceptor.SysInterceptor"/>
                </mvc:interceptor>
            </mvc:interceptors>

建立intercepter包

包:cn.baidu.intercepter

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

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import cn.kgc.pojo.User;
import cn.kgc.tools.Constants;

public class SysInterceptor extends HandlerInterceptorAdapter{
	public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception{
	   
	    HttpSession session = request.getSession();

	    User user = (User)session.getAttribute(Constants.USER_SESSION);

	    if(null == user){
	    response.sendRedirect(request.getContextPath()+"/401.jsp");
	    return false;
	    }
	    return true;
	    }
}

controller類

package cn.kgc.controller;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;



import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import cn.kgc.pojo.User;
import cn.kgc.service.UserService;
import cn.kgc.tools.Constants;

@Controller
public class LoginController {

	 @Resource
	 private UserService userService;
	 
	 @RequestMapping(value="/login.html")
	    public String login(){
	    
	    return "login";
	    }
	 
	 @RequestMapping(value="/dologin.html",method=RequestMethod.POST)
	    public String doLogin(@RequestParam String userCode,@RequestParam String userPassword,HttpServletRequest request,HttpSession session) throws Exception{
	   
	    //呼叫service方法,進行使用者匹配
	    User user = userService.login(userCode,userPassword);
	    if(null != user){//登入成功
	    //放入session
	    session.setAttribute(Constants.USER_SESSION, user);
	    //頁面跳轉(frame.jsp)
	    return "redirect:/sys/main.html";
	    }else{
	    //頁面跳轉(login.jsp)帶出提示資訊--轉發
	    request.setAttribute("error", "使用者名稱或密碼不正確");
	    return "login";
	    }
	    }

	    @RequestMapping(value="/logout.html")
	    public String logout(HttpSession session){
	    //清除session
	    session.removeAttribute(Constants.USER_SESSION);
	    return "login";
	    }

	    @RequestMapping(value="/sys/main.html")
	    public String main(){
	    return "frame";
	    }
}

service層

package cn.kgc.service;



import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import cn.kgc.dao.UserMapper;
import cn.kgc.pojo.User;
@Service
public class UserServiceImpl implements UserService{

	 @Resource
     private UserMapper userMapper;
	
	@Override
	public User login(String userCode, String userPassword) throws Exception {
		// TODO Auto-generated method stub
		 User user = null;
         user = userMapper.getLoginUser(userCode);
         //匹配密碼
         if(null != user){
	         if(!user.getUserPassword().equals(userPassword)){
	        	 user = null;
	         }
	         
	      }
         return user;
         
	}

}

dao層

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "http://mybatis.org/dtd/mybatis-3-mapper.dtd" "mybatis-3-mapper.dtd" >
<mapper namespace="cn.kgc.dao.UserMapper">
       <select id="getLoginUser" resultType="User">
            select * from smbms_user u
            <trim prefix="where" prefixOverrides="and | or">
                <if test="userCode != null">
                    and u.userCode = #{userCode}
                </if>
            </trim>
        </select>
</mapper>