日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Springmvc拦截所有html和Controller,实现未登录则返回登录页,已登录则可以访问需要登录的页面。

發(fā)布時(shí)間:2025/3/15 javascript 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Springmvc拦截所有html和Controller,实现未登录则返回登录页,已登录则可以访问需要登录的页面。 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

業(yè)務(wù)邏輯:后端mvc攔截器攔截所有的*.html和*.app請求(controller的后綴,用于識別controller,也可以換成其它如:userLogin.action),檢查登錄狀態(tài)如果未登錄則跳轉(zhuǎn)到登錄頁。(順便說一下login是登錄而不是登陸)

  • web.xml 配置 DispatcherServlet 前端控制器的url-pattern為*.app和*.html。如下所示。
  • <!--配置springmvc DispatcherServlet(前端控制器)--><servlet><servlet-name>SpringMVCDispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><!--配置dispatcher.xml作為mvc的配置文件--><param-name>contextConfigLocation</param-name><param-value>classpath:dispatcher-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup><async-supported>true</async-supported></servlet><servlet-mapping><servlet-name>SpringMVCDispatcher</servlet-name><!--url-pattern的配置,所有.app和.html請求都將被Spring MVC的DispatcherServlet截獲。--><url-pattern>*.app</url-pattern><url-pattern>*.html</url-pattern></servlet-mapping>
  • 寫你的攔截器類,或如下所示
  • public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 獲取請求的URLString url = request.getRequestURI();// URL:除了登錄請求和轉(zhuǎn)發(fā)頁面請求,其它的請求URL都進(jìn)行攔截控制if (url.indexOf("/userLogin.app") >= 0) {return true;}else if(url.indexOf("/forword.jsp") >= 0){return true;} else if(url.indexOf("/login.html") >= 0) {return true;}// 獲取SessionHttpSession session = request.getSession();//獲取session中的用戶登錄數(shù)據(jù)User user = (User) session.getAttribute("User");// 判斷Session中是否有用戶登錄數(shù)據(jù),如果有,則返回true,繼續(xù)向下執(zhí)行if (user != null) {return true;}// 不符合條件的給出提示信息,并轉(zhuǎn)發(fā)到登錄頁面String redirecturl = request.getContextPath() + "/login.html";response.sendRedirect(redirecturl);return false;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {} }
  • 配置springmvc核心配置文件: <mvc:default-servlet-handler />不配這個(gè)啟動(dòng)項(xiàng)目直接404,還有攔截器的<mvc:mapping path="/**" />,注意path。配置如下所示。
  • <!--Spring MVC 在全局配置文件中提供了一個(gè)<mvc:default-servlet-handler/>標(biāo)簽。在 WEB 容器啟動(dòng)的時(shí)候會在上下文中定義一個(gè) DefaultServletHttpRequestHandler,它會對DispatcherServlet的請求進(jìn)行處理,如果該請求已經(jīng)作了映射,那么會接著交給后臺對應(yīng)的處理程序,如果沒有作映射,就交給 WEB 應(yīng)用服務(wù)器默認(rèn)的 Servlet 處理,從而找到對應(yīng)的靜態(tài)資源,只有再找不到資源時(shí)才會報(bào)錯(cuò)。--><mvc:default-servlet-handler /> <!-- 配置攔截器 --><mvc:interceptors><mvc:interceptor><mvc:mapping path="/**" /><bean class="com.*.interceptor.LoginInterceptor" />//這里寫你的攔截器類</mvc:interceptor></mvc:interceptors>
  • 在你的Controller返回的數(shù)據(jù)中,如果登錄成功加上需要跳轉(zhuǎn)的URL,登錄失敗提示登錄失敗。如下所示
  • 為什么不用后端來跳轉(zhuǎn)? 因?yàn)榉祷財(cái)?shù)據(jù)就不能返回頁面,詳見:https://blog.csdn.net/wa_junye/article/details/113866907

    //BindingResult和Valid用作jsr303校驗(yàn),可不加。responseMessage為自定義響應(yīng)消息類,用于響應(yīng)自定義的json數(shù)據(jù) public ResponseMessage userLoginByUsernameAndPassword(@RequestBody @Valid User user,BindingResult bindingResult) throws IOException {//jsr303校驗(yàn)錯(cuò)誤返回jsonif(bindingResult.hasErrors()) {Map<String,Object> map = new HashMap<String,Object>();List<FieldError> errors = bindingResult.getFieldErrors();for(FieldError fieldError : errors) {map.put(fieldError.getField(),fieldError.getDefaultMessage());}responseMessage.setCode("800");responseMessage.setTimestamp(System.currentTimeMillis());return responseMessage.add("errorFields",map);}this.user = userLoginService.selectUserByUsernameAndPwd(user.getUsername(),user.getPassword());if(this.user != null) {session.setAttribute("User",this.user);responseMessage.setCode("200");responseMessage.setMsg("登錄成功");responseMessage.setTimestamp(System.currentTimeMillis());responseMessage.add("url","/staticSource/user/html/datacenter.html");return responseMessage;}responseMessage.setCode("100");responseMessage.setMsg("登陸失敗,請檢查用戶名或密碼是否有誤");responseMessage.setTimestamp(System.currentTimeMillis());return responseMessage;}
  • 前端判斷是否登錄成功,如果是則跳轉(zhuǎn)。前端跳轉(zhuǎn)還是會被攔截器攔截,但是已經(jīng)將登錄成功的數(shù)據(jù)放入了session,攔截器判斷已登錄就可以訪問跳轉(zhuǎn)頁面。
  • //發(fā)送登錄請求并處理響應(yīng)結(jié)果,注意代碼中的switchloginXhr = new MyXhr({"options":{"method":"post","url":getRealPath() + "/user/userLogin.app","data":data},"success":function(data){data = JSON.parse(data);switch (data.code) {case "100": loginMessageEle.innerHTML = data.msg; break;case "200": {loginMessageEle.innerHTML = data.msg;window.location = getRealPath() + data.data.url;} break;case "800": loginMessageEle.innerHTML = data.msg; break;}return false;},"error":function(){loginMessageEle.innerText = "請求失敗";}});

    如果還是可以訪問需要登錄的頁面,請將你的瀏覽器緩存關(guān)閉,或者換一個(gè)瀏覽器來訪問。

    總結(jié)

    以上是生活随笔為你收集整理的Springmvc拦截所有html和Controller,实现未登录则返回登录页,已登录则可以访问需要登录的页面。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。