案例一:未登錄,不能訪問系統頁面
~~~
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 的資源就屬于跨域。