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