1. 程式人生 > >SpringMVC攔截器實現登入認證

SpringMVC攔截器實現登入認證

部落格以Demo的形式講訴攔截器的使用

專案結構如圖:


需要的jar:有springMVC配置需要的jar和jstl需要的jar


SpringMVC包的作用說明:

aopalliance.jar:這個包是AOP聯盟的API包,裡面包含了針對面向切面的介面。通常spring等其它具備動態織入功能的框架依賴這個jar

spring-core.jar:這個jar 檔案包含Spring 框架基本的核心工具類。Spring 其它元件要都要使用到這個包裡的類,是其它元件的基本核心

,當然你也可以在自己的應用系統中使用這些工具類。
外部依賴Commons Logging, (Log4J)。

spring-beans.jar:這個jar 檔案是所有應用都要用到的,它包含訪問配置檔案、建立和管理bean 以及進行Inversion of Control /

Dependency Injection(IoC/DI)操作相關的所有類。如果應用只需基本的IoC/DI 支援,引入spring-core.jar 及spring-beans.jar 檔案

就可以了。

spring-aop.jar:這個jar 檔案包含在應用中使用Spring 的AOP 特性時所需的類和原始碼級元資料支援。使用基於AOP 的Spring特性,如宣告

型事務管理(Declarative Transaction Management),也要在應用裡包含這個jar包。
外部依賴spring-core, (spring-beans,AOP Alliance, CGLIB,Commons Attributes)。

spring-context.jar:這個jar 檔案為Spring 核心提供了大量擴充套件。可以找到使用Spring ApplicationContext特性時所需的全部類,JDNI

所需的全部類,instrumentation元件以及校驗Validation 方面的相關類。
外部依賴spring-beans, (spring-aop)。

spring-context-support:Spring-context的擴充套件支援,用於MVC方面

spring-web.jar
這個jar 檔案包含Web 應用開發時,用到Spring 框架時所需的核心類,包括自動載入Web Application Context 特性的類、Struts 與JSF

整合類、檔案上傳的支援類、Filter 類和大量工具輔助類。
外部依賴spring-context, Servlet API, (JSP API, JSTL, Commons FileUpload, COS)。

spring-webmvc.jar
這個jar 檔案包含Spring MVC 框架相關的所有類。包括框架的Servlets,Web MVC框架,控制器和檢視支援。當然,如果你的應用使用了獨

立的MVC 框架,則無需這個JAR 檔案裡的任何類。
外部依賴spring-web, (spring-support,Tiles,iText,POI)。

spring-aspects.jar
提供對AspectJ的支援,以便可以方便的將面向方面的功能整合進IDE中,比如Eclipse AJDT。
外部依賴。

spring-jdbc.jar
這個jar 檔案包含對Spring 對JDBC 資料訪問進行封裝的所有類。
外部依賴spring-beans,spring-dao。

spring-test.jar
對Junit等測試框架的簡單封裝

spring-tx.jar
Spring的tx事務處理的jar

spring-expression.jar
Spring表示式語言

編寫控制器:

package com.mvc.action;

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 登入認證的控制器
 */
@Controller
public class LoginControl {

	/**
	 * 登入
	 * @param session
	 * 			HttpSession
	 * @param username
	 * 			使用者名稱
	 * @param password
	 * 			密碼
	 * @return
	 */
	@RequestMapping(value="/login")
	public String login(HttpSession session,String username,String password) throws Exception{		
		//在Session裡儲存資訊
		session.setAttribute("username", username);
		//重定向
		return "redirect:hello.action"; 
	}
	
	/**
	 * 退出系統
	 * @param session
	 * 			Session
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value="/logout")
	public String logout(HttpSession session) throws Exception{
		//清除Session
		session.invalidate();
		
		return "redirect:hello.action";
	}
	
	
	
}


編寫攔截器:
package com.mvc.interceptor;

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 LoginInterceptor implements HandlerInterceptor{

	/**
	 * Handler執行完成之後呼叫這個方法
	 */
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception exc)
			throws Exception {
		
	}

	/**
	 * Handler執行之後,ModelAndView返回之前呼叫這個方法
	 */
	public void postHandle(HttpServletRequest request, HttpServletResponse response,
			Object handler, ModelAndView modelAndView) throws Exception {
	}

	/**
	 * Handler執行之前呼叫這個方法
	 */
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
			Object handler) throws Exception {
		//獲取請求的URL
		String url = request.getRequestURI();
		//URL:login.jsp是公開的;這個demo是除了login.jsp是可以公開訪問的,其它的URL都進行攔截控制
		if(url.indexOf("login.action")>=0){
			return true;
		}
		//獲取Session
		HttpSession session = request.getSession();
		String username = (String)session.getAttribute("username");
		
		if(username != null){
			return true;
		}
		//不符合條件的,跳轉到登入介面
		request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
		
		return false;
	}

}



SpringMVC的配置檔案:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
		
		<!-- 使用元件掃描 -->
		<!-- 將action掃描出來,在spring容器中進行註冊,自動對action在spring容器中進行配置 -->
		<context:component-scan base-package="com.mvc.action" />
		
		<!-- 專案的Handler
		<bean name="/hello.action" class="com.mvc.action.HelloAction"></bean>
		 -->
		<!-- 處理器對映器HandlerMapping -->
		<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
		
		<!-- 處理器設配器HandlerAdapter -->
		<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
			<property name="messageConverters">
				<list>
					<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
				</list>
			</property>
		</bean>

		<!-- 檢視解析器ViewResolver -->
		<!-- 解析jsp,預設支援jstl -->
		<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
			<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
			<property name="prefix" value="/WEB-INF/jsp/" />
			<property name="suffix" value=".jsp" />
		</bean>
		
		<!-- 在實際開發中通常都需配置 mvc:annotation-driven標籤,這個標籤是開啟註解 -->
		<mvc:annotation-driven></mvc:annotation-driven>
		<!-- 攔截器 -->
		<mvc:interceptors>
			<!-- 多個攔截器,順序執行 -->
			<mvc:interceptor>
				<mvc:mapping path="/**"/>
				<bean class="com.mvc.interceptor.LoginInterceptor"></bean>
			</mvc:interceptor>
		</mvc:interceptors>
	
</beans>


登入介面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'login.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
	  <form action="${pageContext.request.contextPath}/login.action" method="post">
	  	使用者名稱:<input type="text" name="username" /><br>
	  	密碼:<input type="text" name="password" /><br>
	  	<input type="submit" value="登入" />
	  </form>
  </body>
</html>

登入成功後,跳轉的介面

hello.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'hello.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
  	當前使用者:${username}
  	<c:if test="${username!=null}">
  		<a href="${pageContext.request.contextPath }/logout.action">退出</a>
  	</c:if>
  	${message}
  </body>
</html>

HelloControl.java,我寫成HelloWorld形式的,自己要根據專案去改哦
package com.mvc.action;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

//標記這個類是一個Handler處理器
@Controller
public class HelloAction{

	@RequestMapping("/hello")//制定這個控制類對應的url
	public String hello(Model model){
		String message = "SpringMVC";
		//為model新增Attribute
		model.addAttribute("message",message);
		return "hello";
	}
//	public ModelAndView handleRequest(HttpServletRequest request,
//			HttpServletResponse response) throws Exception {
//		
//		//在頁面上提示一行資訊
//		String message = "hello world!";
//		
//		//通過request物件將資訊在頁面上展示
//		//request.setAttribute("message", message);
//		
//		ModelAndView modelAndView = new ModelAndView();
//		// 相當於request.setAttribute(), 將資料傳到頁面展示
//		//model資料
//		modelAndView.addObject("message", message);
//		//設定檢視
//		modelAndView.setViewName("hello");
//		
//		return modelAndView;
//	}
	
	

	
}




相關推薦

SpringMVC攔截實現登入認證

部落格以Demo的形式講訴攔截器的使用 專案結構如圖: 需要的jar:有springMVC配置需要的jar和jstl需要的jar SpringMVC包的作用說明: aopalliance.jar:這個包是AOP聯盟的API包,裡面包含了針對面向切面的介面。通常

SpringMVC攔截實現登入認證(2017修正版)

     當使用到springmvc的做網頁工程的時候,總會遇到需要判斷登陸許可權的,一般的做法是每次登陸的話,傳送給後臺,後臺返回一個唯一的token,以便標識使用者每一次請求的許可權,如果沒有登陸成功,則token為空,訪問任意網址都會跳到登陸介面,所以網上查了,有很多

SpringMVC攔截實現登入驗證

Spring攔截器說明: 攔截器通過統一攔截從瀏覽器發往伺服器的請求,進行相應的處理,完成功能增強 SpringMVC攔截器是可插拔式設計,使用時,直接在配置檔案中應用該攔截器即可 使用場景:解

day80_淘淘商城專案_13_訂單系統搭建 + 展示訂單確認頁面 + 使用者身份認證(SpringMVC攔截) + 實現提交訂單功能_匠心筆記

淘淘商城專案_13 1、訂單系統搭建 1.1、功能分析 1.2、工程搭建 1.2.1、建立訂單服務層工程 1.2.2、建立訂單表現層工程 2、展示訂單確認頁面

springmvc攔截實現用戶登錄權限驗證

tdi form char urn isp msg NPU 數據 drive 實現用戶登錄權限驗證 先看一下我的項目的目錄,我是在intellij idea 上開發的 1、先創建一個User類 1 package cn.lzc.po; 2 3 public

使用SpringMVC攔截實現簡單的登陸驗證功能(面向小白)

接著上一篇文章《使用Idea建立一個JavaWeb的SSM(maven)專案實現登陸功能》 在上一篇文章裡已經實現了頁面登陸的功能,但是不夠完善,在沒有攔截器的情況下我可以不登陸一樣可以訪問index.jsp頁面 如圖 在這種情況下專案是有風險的,別人可以在不登陸的情況下隨意訪問你的

spring MVC——攔截實現登入檢測和效能監控

1. 攔截器簡介 Spring MVC中的攔截器,類似於Servlet開發中的過濾器Filter,主要用來攔截使用者的請求並進行相應的處理,可以用來做日誌記錄、許可權驗證或者登陸檢測。 (1) 常見的應用場景 日誌記錄:記錄請求資訊的日誌,以便進行資訊監控、資訊統計、計

struts2攔截實現登入攔截

話不多說,直接開始原始碼 這是工程目錄 首先建立資料表 DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(20

springMVC_11攔截實現登入

  一.   思路 controller實現核對使用者名稱和密碼,如果核對正確則儲存到session中並且跳轉到主頁 系統中包含諸多介面,部分介面不需要登入即可進行訪問,通過攔截器實現判斷是否是不需要登入的介面和使用者是否登入(通過session),如果登入或者是不

SpringMVC攔截應用--------登陸認證

核心:攔截器、過濾器等都是AOP程式設計思想的一種體現 一、有一個登入頁面:login.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"

SpringMVC+Spring Security實現登入認證的簡單功能

一、依賴pom.xml 這裡僅僅列出security需要的依賴,其他依賴見前面Spring目錄下文章。 <!-- Spring Security -->      <dependency>          <groupId>org

學習淘淘商城第一百零三課(利用攔截實現登入功能及訂單確認頁面展示)

        我們上節課一起搭建了訂單的服務工程和web工程,我們參考京東可以知道,京東在沒有登入時就可以使用購物車,但是當要真正付款的時候,一定是要求登入的。也就是說由購物車列表頁面直接跳轉到登入頁面去登入。這顯然用到了攔截器的功能,這節課我們便一起實現登入功能。  

2018.8.2 java電商從1到2--chapter10 SpringMVC攔截實現許可權統一驗證

目錄 第10章 SpringMVC攔截器實現許可權統一驗證 10.1 總覽 一期程式碼關於許可權判定的演進 SpringMVC攔截流程圖 攔截器配置與使用 HttpServletResponse的重置 登入不攔截 程式碼重構 10.

SpringMVC攔截實現原理和登入實現

SpringMVC 攔截器的原理圖 springMVC攔截器的實現一般有兩種方式      第一種方式是要定義的Interceptor類要實現了Spring的HandlerInterceptor 介面    &n

SpringMVC攔截實現登錄驗證

一個 throw idt 判斷 sed XML auto 也有 登錄驗證 今天回頭看之前發的javaweb學習路線圖,發現把路線圖中的也學的有一半多了,不過還是路漫漫。在前面的博客中有學習過spring的aop,它利用動態代理實現,在springmvc中也是一樣,今天使用H

SpringMvc 攔截 對未登入系統的操作進行攔截處理

各類攔截器的傳統寫法案例: 1 在spring-mvc.xml 檔案中新增 攔截器 如下: <!-- 通用攔截器配置 --> <mvc:interceptors>     ...     ...  

springmvc攔截 登入快取失效然後跳轉重新登入

1.新增配置檔案dispatcher-servlet.xml   <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/bean

Python-Flask裝飾實現使用者認證登入功能(登入限制)

  當我們開發某個網站的時候,肯定會有使用者登入和註冊的功能,我們寫好網頁的時候,要是沒有認證,知道路由就能訪問資源(或者不想沒有登入就讓使用者使用某個功能),使用者登入的資訊都是在cook裡面,需要認證就去cook裡面取值判斷是否有該使用者,當用戶沒有登入就去訪問資源路由時,就拒

SpringMVC攔截實現單方登陸

過濾器跟攔截器的區別 ①攔截器是基於java的反射機制的,而過濾器是基於函式回撥。②攔截器不依賴與servlet容器,過濾器依賴與servlet容器。③攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。④攔截器可以訪問action上下文、值棧裡的物件,而過濾器不能訪問。⑤在actio

自定義攔截實現驗證登入

首先給出Struts2的內部執行圖 從圖中我們可以看出來,一個請求要到達Action需要經過很多的攔截器,也就是這些攔截器幫我們實現了struts當中的很多功能,例如表單登入,例項化成為一個javabean物件等等的功能。其中攔截器的實現就跟我們的serv