11-拦截器interceptor

package org.gzcgxt.oa.domain;

import lombok.Data;

@Data
public class User {
    private Integer id;
    private String    name;
    private String    pwd;
}
package org.gzcgxt.oa.util;

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

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

public class HttpContext {
    
    /**
     * 获取请求对象
     * <p>Title: getRequest</p>
     * <p>Description: </p>
     * @return
     */
    public static HttpServletRequest getRequest()
    {
        ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes();
        return attr.getRequest();
    }
    
    
    /**
     * 获取响应对象
     * <p>Title: getResponse</p>
     * <p>Description: </p>
     * @return
     */
    public static HttpServletResponse getResponse()
    {
        ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes();
        return attr.getResponse();
    }
    
}
package org.gzcgxt.oa.util;

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

import org.gzcgxt.oa.domain.User;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

public class UserContext {

    private static final String USER_IN_STRING = "user_in_session";
    
    /**
     * 获取session对象
     * <p>Title: getSession</p>
     * <p>Description: </p>
     * @return
     */
    public static HttpSession getSession() {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes();

        HttpServletRequest request = attributes.getRequest();

        return request.getSession();
    }
    
    /**
     * 设置session对象
     * <p>Title: setSession</p>
     * <p>Description: </p>
     * @param user
     */
    public static void setSession(User user) {
        HttpSession session = UserContext.getSession();
        //如果没有传递user 则注销用户
        if (user == null) {
            session.invalidate();
        } else {
            //设置session对象
            session.setAttribute(USER_IN_STRING, user);
        }
    }

    /**
     * 获取登录用户
     * <p>Title: getUser</p>
     * <p>Description: </p>
     * @return
     */
    public static User getUser() {
        return (User) UserContext.getSession().getAttribute(USER_IN_STRING);
    }

}
package org.gzcgxt.oa;

import java.io.IOException;

import org.gzcgxt.oa.domain.User;
import org.gzcgxt.oa.util.HttpContext;
import org.gzcgxt.oa.util.UserContext;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
@RequestMapping("/login")
@SessionAttributes(value="msg")
public class LoginController {
    
    @RequestMapping("/index")
    public String index(Model m)
    {
        return "login/index";
    }
    
    
    @RequestMapping("/checking")
    public String checking(@RequestParam("name")String name,@RequestParam("pwd")String pwd,RedirectAttributes ra)
    {
        System.out.println(name);
        System.out.println(pwd);
        if(name.equals("admin") && pwd.equals("123456")){
            User u=new User();
            u.setName(name);
            u.setPwd(pwd);
            u.setId(110);
            UserContext.setSession(u);
            return "redirect:/manager/index";
        }
        ra.addFlashAttribute("msg","用户名或密码错误");
        return "redirect:/login/index";
    }
    
    
    @RequestMapping("/quit")
    public String quit()
    {
        UserContext.setSession(null);
        return "redirect:/login/index";
    }
    
}
package org.gzcgxt.oa;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/manager")
public class ManagerController {
    
    @RequestMapping("/index")
    public String index(Model m)
    {
        return "index";
    }
    
}
package org.gzcgxt.oa.interceptor;

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

import org.gzcgxt.oa.domain.User;
import org.gzcgxt.oa.util.UserContext;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 * 登录拦截器
 * <p>Title: LoginInterceptor</p>
 * <p>Description: </p>
 * <p>Company: www.baidu.com</p> 
 * @author    刘诗华 微信:15390725037
 * @date    2019-7-17上午10:13:24
 * @version 1.0
 */
public class LoginInterceptor implements HandlerInterceptor{

    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        
        System.out.println("执行Handler方法前");
        User user = UserContext.getUser();
        
        if(user!=null)
        {
            return true;
        }
        response.sendRedirect("/login/index");
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
    
        System.out.println("ModelAndView返回前");
    }

    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {

        System.out.println("执行Handler结束");
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
">

    <!--@RequestMapping标签MVC注解驱动 -->
    <mvc:annotation-driven />

    <!--spring组件扫描哪些包 IOC组件扫描器 -->
    <context:component-scan base-package="com.gzcgxt.erp" />
    <context:component-scan base-package="org.gzcgxt.oa" />

    <!-- 配置静态资源文件 原理:将SpringMVC上下文环境中定义一个DefaultServletHttpRequestHandler,对所有前端控制器的请求进行过滤筛选 
        如果发现当前的请求没有经过映射器,则就把此请求重新交还给Tomcat的默认servlet来处理解析 -->
    <mvc:default-servlet-handler />

    <!--配置视图解析器 -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>
    
    <!-- 登录拦截器配置 -->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/login/index"/>
            <mvc:exclude-mapping path="/login/checking"/>
            <bean id="loginInterceptor" class="org.gzcgxt.oa.interceptor.LoginInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

</beans>

 

posted @ 2019-07-16 23:24  往事只能回味---  阅读(137)  评论(0)    收藏  举报