springMVC拦截器大家在做项目中肯定会遇到。上个项目刚弄完,今天就来谢谢springMVC拦截器。等下次做项目时,直接copy用。
起思想项目大家都知道。就是拦截非法(未登录)的URL。其步骤如下。
起思想项目大家都知道。就是拦截非法(未登录)的URL。其步骤如下。
1.srping-mvc.xml文件
<!-- 对需要登录之后才能访问的路径页面进行拦截-->
<mvc:interceptors>
<bean class="com.hx.cyb.front.interceptor.ActionInterceptor">
</bean>
</mvc:interceptors>
2.添加相对应的处理类ActionInterceptor
@Component
public class ActionInterceptor extends HandlerInterceptorAdapter
{
private static final Logger log = LoggerFactory.getLogger(SelectProjectAction.class);
//收集不要拦截的URL
<span style="color:#FF0000;">public static List<String> noAuthorized=new ArrayList<String>();
static{
Iterator<?> iterator = FileUtil.findXMLForAll("url","no_authorized.xml");
if (iterator != null) {
while (iterator.hasNext()) {
Element urlElement = (Element) iterator.next();
String url=urlElement.getText();
noAuthorized.add(url);
}
}
}</span>
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception
{
super.afterCompletion(request, response, handler, ex);
}
/**
* 拦截所有spring MVC请求。如果该请求路径是首页或者不需要授权的路径(noAuthorized)则,不受任何影响。
* 否则,如果其他路径,且用户未登陆,则返回到首页。
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception
{
String root = request.getContextPath();
String url = request.getRequestURI();
int questionIndex=0;
if(url.indexOf("?")!=-1){
questionIndex=url.indexOf("?");
}else{
questionIndex=url.length()-1;
}
String notParamUrl=url.substring(0, questionIndex+1);
String notRootParamUrl=notParamUrl.replace(root+"/", "");
if(notParamUrl.startsWith(root+"/selectProjectNoLogin.do")||notParamUrl.contains("/noAuthorized")||noAuthorized.contains(notRootParamUrl)){
log.debug(url+"该路径不需要做登陆验证");
}else if(request.getSession().getAttribute(SystemConstants.USER_SESSION_INFO) == null){
response.sendRedirect(root + "/selectProjectNoLogin.do");
return false;
}
return super.preHandle(request, response, handler);
}
}
3.收集不要拦截的URL
<no_authorized>
<url>xxx1.do</url>
<url>xxx2.do</url>
<url>xxx3.do</url>
<url>xxx4.do</url>
</no_authorized>