springMVC拦截器使用之登录拦截器

  • 自定义拦截器
  • 自定义异常类
  • 配置springMVC拦截器
  • 配置springMVC异常解析器

自定义拦截器

package com.shengya.web.www.interecptor;

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

import com.shengya.service.bean.User;
import com.shengya.web.www.vo.response.UserResponseVo;
import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;


public class SecurityInterceptor implements HandlerInterceptor {
    static Logger logger = Logger.getLogger(SecurityInterceptor.class);

    public String[] allowUrls;// 还没发现可以直接配置不拦截的资源,所以在代码里面来排除

    public void setAllowUrls(String[] allowUrls) {
        this.allowUrls = allowUrls;
    }

    @Override
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
        // TODO Auto-generated method stub

    }


    @Override
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
            throws Exception {
        // TODO Auto-generated method stub

    }


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        String requestUrl = request.getRequestURI().replace(request.getContextPath(), "");
//        Cookie[] cookies = request.getCookies();
//        for(Cookie cookie: cookies){
//            if(cookie.getName().toUpperCase().equals("JSESSIONID")){
//                logger.debug("cookie " + cookie.getValue().toString());
//            }
//        }
        logger.debug("请求路径:" + requestUrl);
        if(requestUrl.contains("wap_bole")){
            logger.debug("wap_bole:" + requestUrl);
            return true;
        }
        if (null != allowUrls && allowUrls.length >= 1) {
            for (String url : allowUrls) {
                if (requestUrl.contains(url)) {
                    logger.debug("allowUrls: true" );
                    return true;
                }
            }
        }
        HttpSession session = request.getSession(true);
        logger.debug("sessionId :" + session.getId());
        logger.debug("session.getAttribute('user')" + session.getAttribute("user"));
        UserResponseVo user = (UserResponseVo) session.getAttribute("user");
        logger.debug("UserResponseVo user " + user);
        if (user != null) {
            logger.debug("user != null:" + user);
            return true;
            //return true; // 返回true,则这个方面调用后会接着调用postHandle(), afterCompletion()
        } else {
            logger.debug("throw new SessionTimeoutException();" + user);
            throw new SessionTimeoutException();// 返回到配置文件中定义的路径
        }
    }

}

自定义异常

package com.shengya.web.www.interecptor;

public class SessionTimeoutException extends Exception {
    /** 
     * @Fields serialVersionUID : TODO 
     */  
    private static final long serialVersionUID = -7123162840147928047L;

    public SessionTimeoutException(){  

    }  

    public SessionTimeoutException(Throwable cause){  
        super(cause);  
    }  

    public SessionTimeoutException(String message){  
        super(message);  
    }
}

配置springMVC拦截器,添加放行资源

<mvc:interceptors>
        <mvc:interceptor>
            <!-- 需拦截的地址 -->
            <mvc:mapping path="/*/*"/>
            <bean class="com.shengya.web.www.interecptor.SecurityInterceptor">
                <property name="allowUrls">
                    <list>
                        <!-- 如果请求中包含以下路径,则不进行拦截 -->
                        <value>/user/login</value>
                        <value>/user/preLogin</value>
                        <value>/user/registration</value>
                        <value>/user/forthwithRegister</value>
                        <value>/user/userAgreement</value>
                        <value>/Activity/detail</value>
                        <value>/Content/detail</value>
                        <value>/Enterprise/detail</value>
                        <value>/Resume/detail</value>
                        <value>/Thought/detail</value>
                        <value>/About/aboutOur</value>
                        <value>/Position/detail</value>
                        <value>/HR/sendVerifyCode</value>
                        <value>/checkCode/getCode</value>
                        <value>/user/checkingPhone</value>
                        <value>/user/verifyPhoneIsUser</value>
                        <value>/user/preCreatePwd</value>
                        <value>/user/forgetPwd</value>
                        <value>/optimization/add</value>
                        <value>/ambassador/add</value>
                        <value>/incubatorPlan/add</value>
                        <value>/Position/detail</value>
                        <value>/Content/selectByIdPic</value>
                        <value>/play/generateTicket</value>
                        <value>/play/createUrlStr</value>
                        <value>/play/preGenerateTicket</value>
                        <value>/download</value>
                        <value>/js</value>
                        <value>/css</value>
                        <value>/images</value>
                        <value>/about</value>
                    </list>
                </property>
            </bean>
        </mvc:interceptor>
    </mvc:interceptors>

配置springMVC异常解析器,指定登录首页

<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <prop key="com.shengya.web.www.interecptor.SessionTimeoutException">redirect:/user/preLogin</prop>
            </props>
        </property>
    </bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值