欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springmvc攔截器登錄驗(yàn)證示例

 更新時(shí)間:2017年03月01日 08:27:22   作者:書劍江山  
本篇文章主要介紹了springmvc攔截器登錄驗(yàn)證示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

一開始,學(xué)了攔截器與過(guò)濾器,咋一看兩者有點(diǎn)像,實(shí)際上兩者有很大的不同。就用攔截器和過(guò)濾器分別做了登錄驗(yàn)證試驗(yàn),這次先說(shuō)攔截器。下面是自己實(shí)踐的一個(gè)實(shí)例:

在spring-mvc.xml中配置攔截器:

<mvc:interceptors>
  <mvc:interceptor> 
   <mvc:mapping path="/user/*"/> 
<!-- 定義在mvc:interceptor下面的表示是對(duì)特定的請(qǐng)求才進(jìn)行攔截的 -->
   <bean class="com.wyb.interceptor.LoginInterceptor"/> 
  </mvc:interceptor>  
 </mvc:interceptors>

如上所示,這里配置了LoginIntercepter,為了簡(jiǎn)單起見,該過(guò)濾器只攔截了URL為"/user/*"的請(qǐng)求。

要攔截的請(qǐng)求對(duì)應(yīng)控制器如下:

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.wyb.domain.User;
import com.wyb.service.IUserService;
import com.wyb.service.impl.UserServiceImpl;

@Controller 
@RequestMapping("/user") 
public class UserController { 
 
   private static final Logger LOG=Logger.getLogger(UserController.class);

   @Autowired 
   private IUserService userService; 
  

 @RequestMapping("/showAllUser")
 public String showAllUser(Model m){
  List<User> userlist=new ArrayList<User>(); 
  userlist=userService.findAllUser();
  for(User user :userlist){
   System.out.println(user.getUserName());
  }  
  return "/jsp/showAllUser";
  
 }
}

這里的showAllUser()方法是為了輸出所有的用戶,為了表明執(zhí)行了方法,將所有用戶在后臺(tái)打印,URL為:http://localhost:8080/TestSSM/user/showAllUser,可見該URL肯定會(huì)被LoginIntercepter攔截。

測(cè)試頁(yè)面showAllUser.jsp如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>show All User</title>
</head>
<body>
 this is showAllUser Page!!!
</body>
</html>

LoginIntercepter如下:

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.wyb.domain.User;

public class LoginInterceptor implements HandlerInterceptor{

 @Override
 public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
   throws Exception {
  System.out.println("this is afterCompletion of LoginInterceptor");
  
 }

 @Override
 public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
   throws Exception {
  System.out.println("this is postHandle of LoginInterceptor");
  
 }

 @Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
  // TODO Auto-generated method stub
  System.out.println("this is preHandle of LoginInterceptor");
  HttpSession session=request.getSession();
  User user=(User)session.getAttribute("user");
  if(user==null){
   System.out.println("no user in LoginInterceptor!!!");
   request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);

  } 
  //返回true代表繼續(xù)往下執(zhí)行
  return true;
 }

}

 這里我犯了一個(gè)錯(cuò)誤,聰明的小伙伴也許已經(jīng)看出來(lái)了,如果按照上面的代碼,當(dāng)我們?cè)L問:http://localhost:8080/TestSSM/user/showAllUser結(jié)果如下:

咋一看,成功攔截了,輸入用戶名信息,正常跳轉(zhuǎn)到主頁(yè),再次進(jìn)入http://localhost:8080/TestSSM/user/showAllUser如下:

頁(yè)面正常輸出,已經(jīng)記錄了session,不會(huì)被再次攔截,看似成功了,可是看看后臺(tái)輸出:

有沒有發(fā)現(xiàn),我們執(zhí)行了兩次showAllUser()方法,可見第一次訪問雖然被攔截器攔截了下來(lái)進(jìn)入登錄頁(yè)面,但后臺(tái)已經(jīng)悄悄執(zhí)行了showAllUser()。為什么呢?我們回頭再看看LoginIntercepter.java,尤其是preHandle()方法:

@Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
  // TODO Auto-generated method stub
  System.out.println("this is preHandle of LoginInterceptor");
  HttpSession session=request.getSession();
  User user=(User)session.getAttribute("user");
  if(user==null){
   System.out.println("no user in LoginInterceptor!!!");
   request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);

  } 
  //返回true代表繼續(xù)往下執(zhí)行
  return true;
 }

在判斷user為空后,雖然執(zhí)行了頁(yè)面跳轉(zhuǎn),但是程序還是會(huì)繼續(xù)執(zhí)行,最后返回true,返回true意味著,被攔截的業(yè)務(wù)邏輯可以繼續(xù)往下執(zhí)行,因此,雖然表面上被攔截了,但從本質(zhì)上來(lái)說(shuō)并沒有攔截到。因此需要修改如下:

@Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
  // TODO Auto-generated method stub
  System.out.println("this is preHandle of LoginInterceptor");
  HttpSession session=request.getSession();
  User user=(User)session.getAttribute("user");
  if(user==null){
   System.out.println("no user in LoginInterceptor!!!");
   request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
   //本次訪問被攔截,業(yè)務(wù)邏輯不繼續(xù)執(zhí)行
   return false;
  } 
  //返回true代表繼續(xù)往下執(zhí)行
  return true;
 }

user為空,跳轉(zhuǎn)后,返回false,就不會(huì)執(zhí)行被攔截的業(yè)務(wù)邏輯了,修改后后臺(tái)輸出如下:

現(xiàn)在后臺(tái)正常輸出,且session保存了user信息后,才能執(zhí)行showAllUser()方法,大功告成!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Request與Session的存值取值操作

    Request與Session的存值取值操作

    這篇文章主要介紹了Request與Session的存值取值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(42)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(42)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你
    2021-07-07
  • Java生成動(dòng)態(tài)版驗(yàn)證碼的方法實(shí)例

    Java生成動(dòng)態(tài)版驗(yàn)證碼的方法實(shí)例

    這篇文章主要給大家介紹了利用Java生成動(dòng)態(tài)版驗(yàn)證碼的方法實(shí)例,本文生成的是GIF格式 + 干擾元素,讓驗(yàn)證碼破解難度又上了一個(gè)層次,文中給出了詳細(xì)的示例代碼,并在文末給出了完整的實(shí)例代碼供大家下載學(xué)習(xí),需要的朋友們下面來(lái)一起看看吧。
    2017-04-04
  • 淺析Java中print、printf、println的區(qū)別

    淺析Java中print、printf、println的區(qū)別

    以下是對(duì)Java中print、printf、println的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-08-08
  • java線程并發(fā)cyclicbarrier類使用示例

    java線程并發(fā)cyclicbarrier類使用示例

    CyclicBarrier類似于CountDownLatch也是個(gè)計(jì)數(shù)器,不同的是CyclicBarrier數(shù)的是調(diào)用了CyclicBarrier.await()進(jìn)入等待的線程數(shù),當(dāng)線程數(shù)達(dá)到了CyclicBarrier初始時(shí)規(guī)定的數(shù)目時(shí),所有進(jìn)入等待狀態(tài)的線程被喚醒并繼續(xù),下面使用示例學(xué)習(xí)他的使用方法
    2014-01-01
  • 一篇文章帶你從java字節(jié)碼層理解i++和++i

    一篇文章帶你從java字節(jié)碼層理解i++和++i

    這篇文章帶你從java字節(jié)碼層理解i++和++i,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • 詳解SpringBoot通過(guò)restTemplate實(shí)現(xiàn)消費(fèi)服務(wù)

    詳解SpringBoot通過(guò)restTemplate實(shí)現(xiàn)消費(fèi)服務(wù)

    本篇文章主要介紹了詳解使用RestTemplate消費(fèi)spring boot的Restful服務(wù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • SpringBoot事件發(fā)布與監(jiān)聽超詳細(xì)講解

    SpringBoot事件發(fā)布與監(jiān)聽超詳細(xì)講解

    今天去官網(wǎng)查看spring boot資料時(shí),在特性中看見了系統(tǒng)的事件及監(jiān)聽章節(jié),所以下面這篇文章主要給大家介紹了關(guān)于SpringBoot事件發(fā)布和監(jiān)聽的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Java實(shí)現(xiàn)讀取resources目錄下的文件路徑的九種方式

    Java實(shí)現(xiàn)讀取resources目錄下的文件路徑的九種方式

    本文主要介紹了Java實(shí)現(xiàn)讀取resources目錄下的文件路徑的九種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Java for循環(huán)Map集合優(yōu)化實(shí)現(xiàn)解析

    Java for循環(huán)Map集合優(yōu)化實(shí)現(xiàn)解析

    這篇文章主要介紹了Java for循環(huán)Map集合優(yōu)化實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01

最新評(píng)論