1.首先在springmvc.xml中添加配置

<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/user/**" />
<bean class="com.kingdee.system.interceptor.SecurityInterceptor">
<!-- 定义不过滤的url,需要在拦截器中处理这些,spring不会自动处理 -->
<property name="excludedUrls">
<list>
<value>/logon</value>
<value>/login</value>
<value>/register</value>
<value>/save</value>
<value>/logout</value>
</list>
</property>
</bean>
</mvc:interceptor>
</mvc:interceptors>

这里配置path的时候主要注意:path的路径写成/user/*只会匹配user下一级的url,如果要匹配以user开头的所有url,则要改成/user/**

2.拦截器代码

这是一个做登录验证的例子,如果验证失败返回到登录页面

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; import com.kingdee.system.exception.AuthorizationException; public class SecurityInterceptor implements HandlerInterceptor { private List<String> excludedUrls; public void setExcludedUrls(List<String> excludedUrls) {
this.excludedUrls = excludedUrls;
} @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("intercepter coming...");
//不过滤的url处理
String uri = request.getRequestURI();
for (String url : excludedUrls) {
if (uri.endsWith(url)) {
return true;
}
} //interceptor
HttpSession session = request.getSession();
if (session.getAttribute("user") == null) {
/**
* 第一种方案,直接重定向到登录界面,这里需要注意重定向的路径,最好用绝对路径
* 相对于第二种方案,第一种方案好处是减少异常输出,更直观易理解;缺点是硬编码,用绝对路径才能适配所有url
*/
response.sendRedirect("/springmvc/user/logon");
return false; /*第二种方案,直接抛出异常,在spring配置文件中捕获异常并跳转到对应的url
* throw new AuthorizationException();
*
*/
}else {
return true;
}
} @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e)
throws Exception { } @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mv)
throws Exception { } }

代码里的注释已经说明了,我这个demo试验了两种方案。这里的第一种方案的代码,第二种方案需要在springmvc.xml中添加如下配置

<!-- 异常处理 -->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings">
<props>
<prop key="com.kingdee.system.exception.AuthorizationException">redirect:/user/logon</prop>
</props>
</property>
</bean>

这里只记录了拦截器的主要代码,AuthorizationException直接继承Exception即可,这里不再贴出,如果有需要源码的可以私信我

最新文章

  1. duilib各种布局的作用,相对布局与绝对布局的的意义与用法
  2. nosql理解
  3. 微信公众平台自定义菜单及高级接口PHP SDK
  4. Placeholdem文本域占位符符号标识JavaScript插件
  5. jQuery Ajax通用js封装
  6. Git CMD - log: Show commit logs
  7. MVC-简单验证码制作
  8. hdu 4403 枚举
  9. HDU3853
  10. 使用GDAL图书馆RPC校正问题
  11. apache本地多域配置(wampserver本地多域配置)
  12. JWT 多网站单点登录,放弃session
  13. python实现裴波那契数列
  14. 关于JS获取某月最后一天
  15. Windows Server 2008 R2远程协助选项 灰色
  16. [HDU 1976] Software Version
  17. xampp 80端口被占用后这么办??解决了
  18. Java之所有对象的公用方法&gt;10.Always override toString
  19. dynamic结合匿名类型 匿名对象传参
  20. ThreeJS实现波纹粒子效果

热门文章

  1. Automatic Text Difficulty Classifier Assisting the Selection Of Adequate Reading Materials For European Portuguese Teaching --paper
  2. ACM-ICPC 2018 焦作赛区网络预赛- G:Give Candies(费马小定理,快速幂)
  3. linux zip tar 压缩打包命令
  4. 【BZOJ1823】【JSOI2010】满汉全席
  5. Gravitational Teleport简单使用
  6. 数学 它的内容,方法和意义 第三卷 (A. D. 亚历山大洛夫 著)
  7. NonAction与ChildActionOnly
  8. 记录:.user.ini 使用
  9. SimpleEntity
  10. Openfire源码阅读(一)