案例一:未登录,不能访问系统页面
~~~
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;
public class AdminInterceptor implements HandlerInterceptor{
@Override
public void afterCompletion(HttpServletRequest httpRequest,
HttpServletResponse httpResponse, Object arg2, Exception arg3)
throws Exception {
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView arg3) throws Exception {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object object) throws Exception {
HttpSession session = request.getSession();
if (session!= null){
if (session.getAttribute("isLogin")!=null){
if (session.getAttribute("isLogin").equals("Yes")){
return true;
}
}
}
request.getRequestDispatcher("/back/admin_login.jsp").forward(request,response);
return false;
}
}
~~~
springmvc.xml配置
~~~
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/Admin/*"/>
<!--<mvc:exclude-mapping path="/admin/*"/>-->
<bean class="com.neuedu.tools.AdminInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
~~~
案例二:解决前后端分离开发中的ajax跨域访问问题:
~~~
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class AccessControllAllowInterceptor implements HandlerInterceptor {
@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 arg0, HttpServletResponse response, Object arg2) throws Exception {
//CROS
response.addHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
return true;
}
}
~~~
springmvc.xml配置
~~~
<mvc:interceptors>
<!-- 跨域访问 -->
<mvc:interceptor>
<mvc:mapping path="/*"/>
<bean class="com.lamport.education.interceptor.AccessControllAllowInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
~~~
附录:
1.什么是跨域?
跨域是指从一个域名的网页去请求另一个域名的资源。比如从www.baidu.com 页面去请求 www.google.com 的资源。跨域的严格一点的定义是:只要 协议,域名,端口有任何一个的不同,就被当作是跨域
2.为什么浏览器要限制跨域?
原因就是安全问题:如果一个网页可以随意地访问另外一个网站的资源,那么就有可能在客户完全不知情的情况下出现安全问题。比如下面的操作就有安全问题:
用户访问www.mybank.com ,登陆并进行网银操作,这时cookie啥的都生成并存放在浏览器
用户突然想起件事,并迷迷糊糊地访问了一个邪恶的网站 www.xiee.com
这时该网站就可以在它的页面中,拿到银行的cookie,比如用户名,登陆token等,然后发起对www.mybank.com 的操作。
如果这时浏览器不予限制,并且银行也没有做响应的安全处理的话,那么用户的信息有可能就这么泄露了。
3.为什么要跨域?
既然有安全问题,那为什么又要跨域呢? 有时公司内部有多个不同的子域,比如一个是location.company.com ,而应用是放在app.company.com , 这时想从 app.company.com去访问 location.company.com 的资源就属于跨域。