自定义拦截器 自定义异常类 配置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>