SpringMVC拦截器配置
2024-08-24 20:07:08
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即可,这里不再贴出,如果有需要源码的可以私信我
最新文章
- duilib各种布局的作用,相对布局与绝对布局的的意义与用法
- nosql理解
- 微信公众平台自定义菜单及高级接口PHP SDK
- Placeholdem文本域占位符符号标识JavaScript插件
- jQuery Ajax通用js封装
- Git CMD - log: Show commit logs
- MVC-简单验证码制作
- hdu 4403 枚举
- HDU3853
- 使用GDAL图书馆RPC校正问题
- apache本地多域配置(wampserver本地多域配置)
- JWT 多网站单点登录,放弃session
- python实现裴波那契数列
- 关于JS获取某月最后一天
- Windows Server 2008 R2远程协助选项 灰色
- [HDU 1976] Software Version
- xampp 80端口被占用后这么办??解决了
- Java之所有对象的公用方法>;10.Always override toString
- dynamic结合匿名类型 匿名对象传参
- ThreeJS实现波纹粒子效果
热门文章
- Automatic Text Difficulty Classifier Assisting the Selection Of Adequate Reading Materials For European Portuguese Teaching --paper
- ACM-ICPC 2018 焦作赛区网络预赛- G:Give Candies(费马小定理,快速幂)
- linux zip tar 压缩打包命令
- 【BZOJ1823】【JSOI2010】满汉全席
- Gravitational Teleport简单使用
- 数学 它的内容,方法和意义 第三卷 (A. D. 亚历山大洛夫 著)
- NonAction与ChildActionOnly
- 记录:.user.ini 使用
- SimpleEntity
- Openfire源码阅读(一)