自己写项目玩又要用到简单的权限管理,于是总结下拦截器的简单使用。
spring-mvc.xml配置
<!-- 拦截器设置 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截所有请求 -->
<!-- <mvc:mapping path="/**" /> -->
<mvc:mapping path="/god/**" />
<mvc:mapping path="/blog/**" />
<mvc:mapping path="/file/**" />
<bean class="com.jiest.interceptor.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
自定义拦截器的类所在路径:com.jiest.interceptor.MyInterceptor
要拦截的路径为各个controller,如果只写一个/**则是拦截所有请求,包括静态资源。
package com.jiest.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class MyInterceptor implements HandlerInterceptor {
// 写自己的规则,通过返回true,拦截返回false
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String uri = request.getRequestURI();// 实际访问的接口:/home/blog/list
System.out.println(uri);
// 下面的接口是需要验证的,首先验证是否登录
Object isLogin = request.getSession().getAttribute("login");
if (isLogin == null || !isLogin.equals(1)) {
System.out.println("error: unlogin");
// response.sendError(401);// 未登陆
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// System.out.println("IcmsInterceptor.postHandle()");
// 这句话的意思,是让浏览器用utf8来解析返回的数据
response.setHeader("Content-type", "text/html;charset=UTF-8");
// 这句话的意思,是告诉servlet用UTF-8转码,而不是用默认的ISO8859
response.setCharacterEncoding("UTF-8");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
}
大概就这样了。
突然想起,做个人网站,权限管理没必要像之前项目那么麻烦,还弄些表。既然这个网站只有一个管理员,那我完全可以只对POST请求做拦截验证,这样简单多了。