SpringMVC實(shí)現(xiàn)登錄與注冊(cè)功能的詳細(xì)步驟
一.準(zhǔn)備工作
1.通過(guò)Maven安裝所需依賴:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>SpringMVCPractice1</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>SpringMVCPractice1 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Spring MVC 依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.25</version> <!-- 可以根據(jù)需要調(diào)整版本 -->
</dependency>
<!-- Druid 依賴 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version> <!-- 可以根據(jù)需要調(diào)整版本 -->
</dependency>
<!-- MySQL 連接器依賴 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version> <!-- 可以根據(jù)需要調(diào)整版本 -->
</dependency>
<!-- Spring Context 依賴(通常與 Spring MVC 一起使用) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.25</version> <!-- 可以根據(jù)需要調(diào)整版本 -->
</dependency>
<!-- Spring Core 依賴(通常與 Spring MVC 一起使用) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.25</version> <!-- 可以根據(jù)需要調(diào)整版本 -->
</dependency>
<!-- Spring Transaction -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.23</version>
</dependency>
<!-- Jackson JSON Processor -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- JSP (If using JSP for views) -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--jsp坐標(biāo)-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.25</version> <!-- 請(qǐng)根據(jù)你的項(xiàng)目需要調(diào)整版本 -->
</dependency>
</dependencies>
<build>
<finalName>SpringMVCPractice1</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>7</source>
<target>7</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.在配置文件中添加:
<context:component-scan base-package="buka" />
<mvc:annotation-driven />這是為了開(kāi)啟包掃描以使用注解
3.創(chuàng)建User類:
package buka;
public class User {
private int id;
private String userName;
private String passWord;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
}
4.配置中文過(guò)濾器以及DispatcherServlet
在為web.xml中添加:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- Filters -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Servlets -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
二.登陸頁(yè)面的實(shí)現(xiàn)
1.先簡(jiǎn)單寫(xiě)出前端頁(yè)面,在webapp下創(chuàng)建login.jsp:
<%--
Created by IntelliJ IDEA.
User: Lenovo
Date: 2024/7/23
Time: 10:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<style>
body {
width: 100%;
height: 100vh;
background-color: brown;
display: flex;
align-items: center;
justify-content: center;
margin: 0;
}
div {
width: 400px;
padding: 20px;
background-color: pink;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
border-radius: 10px;
}
form {
display: flex;
flex-direction: column;
align-items: center;
}
form input[type="text"], form input[type="password"] {
margin-bottom: 15px;
padding: 10px;
width: 80%;
border: 1px solid #ccc;
border-radius: 5px;
font-size: 16px;
}
form input[type="submit"], form button {
padding: 10px 20px;
margin-top: 10px;
width: 85%;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s ease;
}
form input[type="submit"] {
background-color: #4CAF50;
color: white;
}
form input[type="submit"]:hover {
background-color: #45a049;
}
form button {
background-color: #2196F3;
color: white;
}
form button:hover {
background-color: #1976D2;
}
h1 {
text-align: center;
margin-bottom: 20px;
}
</style>
<body>
<div>
<h1>登錄</h1>
<form action="/login" method="post">
用戶名: <input type="text" name="username"><br/>
密碼: <input type="text" name="password"><br/>
<input type="submit" value="submit" id="submit">
<button id="register">register</button>
</form>
</div>
</body>
</html>
運(yùn)行效果為:

2.考慮后面要發(fā)送ajax請(qǐng)求:
這里需要引入jquery,由于我本地有jquery的靜態(tài)文件,所以這里我直接將它放進(jìn)webapp下引入使用,大家如果沒(méi)有可以使用CDN,即<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>也可正常運(yùn)行
注意由于springMVC默認(rèn)會(huì)將webapp下的文件識(shí)別為頁(yè)面格式,如果這是不做任何處理直接使用的jquery的話會(huì)出現(xiàn)404,所以要配置資源處理器,聲明該文件為靜態(tài)資源:
在對(duì)應(yīng)包下創(chuàng)建WebConfig類(這里可以在配置文件配置,但是習(xí)慣上我用注解的方式):
package buka;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "buka")
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/js/**").addResourceLocations("/js/");
}
}如此我們就可以正常使用jquery了
3.創(chuàng)建后端文件:

這里Controller是整體的控制層,Service是邏輯處理層,Dao是數(shù)據(jù)交互層
首先從Dao層開(kāi)始書(shū)寫(xiě),考慮登錄功能要從數(shù)據(jù)庫(kù)中查詢對(duì)應(yīng)用戶信息是否存在,所以在這之前應(yīng)有數(shù)據(jù)庫(kù):

(1)在Dao層添加代碼:
這段代碼比較簡(jiǎn)單,就是查詢并根據(jù)每一行數(shù)據(jù)創(chuàng)建User,最后返回一個(gè)User列表
package buka.Dao;
import buka.User;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
@Repository
public class UserDao {
@Autowired
private DruidDataSource dataSource;
public List<User> getAllUsers() {
List<User> list = new ArrayList<User>();
String sql="select * from t_user";
try {
Connection conn = dataSource.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setUserName(rs.getString("userName"));
user.setPassWord(rs.getString("passWord"));
list.add(user);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
return list;
}
}(2)寫(xiě)Service層邏輯:
將傳入的數(shù)據(jù)與Dao層返回的用戶列表一一進(jìn)行比對(duì),如果比對(duì)成功就返回true,否則證明數(shù)據(jù)庫(kù)中沒(méi)有這個(gè)用戶
package buka.Service;
import buka.Dao.UserDao;
import buka.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@org.springframework.stereotype.Service
public class UserService {
@Autowired
private UserDao userDao;
public boolean validateUser(String username,String password) {
List<User> users = userDao.getAllUsers();
System.out.println(username+" "+password);
for (User user : users) {
System.out.println(user.getUserName()+"-----"+user.getPassWord());
if(user.getUserName().equals(username) && user.getPassWord().equals(password)){
return true;
}
}
return false;
}
}(3)寫(xiě)Controller層:
添加地址映射,接受前端參數(shù),如果登陸成功,將用戶名存儲(chǔ)到session域(后面會(huì)有用),進(jìn)行重定向,否則重新回到該頁(yè)面
package buka.Controller;
import buka.Dao.UserDao;
import buka.Service.UserService;
import buka.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@org.springframework.stereotype.Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/login")
public void login(HttpServletRequest request, HttpServletResponse response,
@RequestParam("username") String username,
@RequestParam("password") String password) throws IOException {
boolean flag = userService.validateUser(username, password);
if (flag) {
// 登錄成功后將用戶信息存儲(chǔ)到Session中
request.getSession().setAttribute("user", username);
response.sendRedirect("success.jsp");
} else {
response.sendRedirect("login.jsp");
}
}
}(4)進(jìn)行測(cè)試:


如此證明功能沒(méi)有問(wèn)題,事實(shí)上現(xiàn)在已經(jīng)實(shí)現(xiàn)了登錄功能,但是為了體現(xiàn)異步編程,我們使用ajax發(fā)送請(qǐng)求,修改login.jsp:
<%--
Created by IntelliJ IDEA.
User: Lenovo
Date: 2024/7/23
Time: 10:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<style>
body {
width: 100%;
height: 100vh;
background-color: brown;
display: flex;
align-items: center;
justify-content: center;
margin: 0;
}
div {
width: 400px;
padding: 20px;
background-color: pink;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
border-radius: 10px;
}
form {
display: flex;
flex-direction: column;
align-items: center;
}
form input[type="text"], form input[type="password"] {
margin-bottom: 15px;
padding: 10px;
width: 80%;
border: 1px solid #ccc;
border-radius: 5px;
font-size: 16px;
}
form input[type="submit"], form button {
padding: 10px 20px;
margin-top: 10px;
width: 85%;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s ease;
}
form input[type="submit"] {
background-color: #4CAF50;
color: white;
}
form input[type="submit"]:hover {
background-color: #45a049;
}
form button {
background-color: #2196F3;
color: white;
}
form button:hover {
background-color: #1976D2;
}
h1 {
text-align: center;
margin-bottom: 20px;
}
</style>
<body>
<div>
<h1>登錄</h1>
<form action="/login" method="post">
用戶名: <input type="text" name="username"><br/>
密碼: <input type="text" name="password"><br/>
<input type="submit" value="submit" id="submit">
<button id="register">register</button>
</form>
</div>
</body>
<script src="js/jquery.min.js"></script>
<script>
$("#submit").click(()=>{
const username = $("input[name='username']").val();
const password = $("input[name='password']").val();
if (!username || !password) {
alert("用戶名和密碼不能為空");
return;
}
$.ajax({
url:"/login",
method:"POST",
success:(res)=>{
if (res.status === "success") {
alert("登陸成功!")
} else {
alert("登錄失敗,請(qǐng)重試!");
}
}
})
});
</script>
</html>
效果上應(yīng)該是不變的。
三.注冊(cè)功能的實(shí)現(xiàn)
1.前端頁(yè)面:
實(shí)際上我們把登陸的頁(yè)面簡(jiǎn)單修改一下就可以:
在webapp下創(chuàng)建register.jsp:
<%--
Created by IntelliJ IDEA.
User: Lenovo
Date: 2024/7/23
Time: 10:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<style>
body {
width: 100%;
height: 100vh;
background-color: lightskyblue;
display: flex;
align-items: center;
justify-content: center;
margin: 0;
}
div {
width: 400px;
padding: 20px;
background-color: brown;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
border-radius: 10px;
}
form {
display: flex;
flex-direction: column;
align-items: center;
}
form input[type="text"], form input[type="password"] {
margin-bottom: 15px;
padding: 10px;
width: 80%;
border: 1px solid #ccc;
border-radius: 5px;
font-size: 16px;
}
form input[type="submit"] {
padding: 10px 20px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s ease;
}
form input[type="submit"]:hover {
background-color: #45a049;
}
h1 {
text-align: center;
margin-bottom: 20px;
}
</style>
<body>
<div>
<h1>注冊(cè)</h1>
<form action="/register" method="post">
用戶名: <input type="text" name="username"><br/>
密碼: <input type="text" name="password"><br/>
<input type="submit" value="submit" id="submit">
</form>
</div>
</body>
<script src="js/jquery.min.js"></script>
<script>
$("#submit").click(()=>{
const username = $("input[name='username']").val();
const password = $("input[name='password']").val();
if (!username || !password) {
alert("用戶名和密碼不能為空");
return;
}
})
</script>
</html>
2.對(duì)登陸頁(yè)面的注冊(cè)按鈕添加點(diǎn)擊事件:
當(dāng)點(diǎn)擊注冊(cè)按鈕時(shí)跳轉(zhuǎn)到register.jsp頁(yè)面
注意,由于注冊(cè)按鈕寫(xiě)在了form里面,當(dāng)點(diǎn)擊按鈕時(shí),默認(rèn)會(huì)發(fā)起提交,這里要阻止表單的默認(rèn)行為,在login.jsp中添加:
$("#register").click((event) => {
event.preventDefault(); // 阻止表單的默認(rèn)提交行為
window.location.href = "register.jsp";
});3.創(chuàng)建后端文件:
(1)在Dao層添加代碼:
由于注冊(cè)用戶相當(dāng)于向數(shù)據(jù)庫(kù)中添加用戶,所以重要的部分就是Dao層的數(shù)據(jù)操縱
package buka.Dao;
import buka.User;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
@Repository
public class UserDao {
@Autowired
private DruidDataSource dataSource;
public List<User> getAllUsers() {
List<User> list = new ArrayList<User>();
String sql="select * from t_user";
try {
Connection conn = dataSource.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setUserName(rs.getString("userName"));
user.setPassWord(rs.getString("passWord"));
list.add(user);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
return list;
}
public boolean addUser(User user) {
if (user.getUserName() == null || user.getUserName().isEmpty() ||
user.getPassWord() == null || user.getPassWord().isEmpty()) {
return false;
}
String sql = "insert into t_user(userName, passWord) values(?, ?)";
try {
Connection conn = dataSource.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, user.getUserName());
ps.setString(2, user.getPassWord());
int rowsAffected = ps.executeUpdate(); // 使用 executeUpdate 方法
return rowsAffected > 0; // 判斷是否有行受到影響
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
(2)寫(xiě)Service邏輯:
直接返回Dao層結(jié)果就行
package buka.Service;
import buka.Dao.UserDao;
import buka.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@org.springframework.stereotype.Service
public class UserService {
@Autowired
private UserDao userDao;
public boolean validateUser(String username,String password) {
List<User> users = userDao.getAllUsers();
System.out.println(username+" "+password);
for (User user : users) {
System.out.println(user.getUserName()+"-----"+user.getPassWord());
if(user.getUserName().equals(username) && user.getPassWord().equals(password)){
return true;
}
}
return false;
}
public boolean addUser(User user) {
return userDao.addUser(user);
}
}
(3)寫(xiě)Controller層:
添加地址映射,判斷是否添加成功以進(jìn)行頁(yè)面跳轉(zhuǎn)
package buka.Controller;
import buka.Dao.UserDao;
import buka.Service.UserService;
import buka.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@org.springframework.stereotype.Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/login")
public void login(HttpServletRequest request, HttpServletResponse response,
@RequestParam("username") String username,
@RequestParam("password") String password) throws IOException {
boolean flag = userService.validateUser(username, password);
if (flag) {
// 登錄成功后將用戶信息存儲(chǔ)到Session中
request.getSession().setAttribute("user", username);
response.sendRedirect("success.jsp");
} else {
response.sendRedirect("login.jsp");
}
}
@RequestMapping("/register")
public void register(HttpServletRequest request, HttpServletResponse response,
@RequestParam("username") String username,
@RequestParam("password") String password) throws IOException {
User user = new User();
user.setUserName(username);
user.setPassWord(password);
boolean flag = userService.addUser(user);
if (flag) {
response.sendRedirect("login.jsp");
}else{
response.sendRedirect("register.jsp");
}
}
}
(4)進(jìn)行測(cè)試:

點(diǎn)擊提交后跳轉(zhuǎn)回登陸頁(yè)面


如此注冊(cè)功能書(shū)寫(xiě)完畢。
四.路由問(wèn)題考慮
- 問(wèn)題一:我們每次開(kāi)啟項(xiàng)目,都會(huì)去index.jsp頁(yè)面,按理來(lái)說(shuō)我應(yīng)該直接來(lái)到登陸頁(yè)面
- 問(wèn)題二:我登陸后訪問(wèn)success.jsp等其他頁(yè)面這沒(méi)有問(wèn)題,但是當(dāng)我未登陸的時(shí)候,無(wú)論我想訪問(wèn)那個(gè)頁(yè)面都應(yīng)該自動(dòng)跳轉(zhuǎn)回登陸頁(yè)面,也就是說(shuō)未登錄時(shí)我只能訪問(wèn)login.jsp和register.jsp
解決方案:在之前書(shū)寫(xiě)Controller層時(shí),當(dāng)用戶登陸成功時(shí),我們將用戶名信息存儲(chǔ)到了session域中,我們可以通過(guò)檢測(cè)session域是否有值來(lái)進(jìn)行頁(yè)面控制,可是如何控制?這里我們用過(guò)濾器實(shí)現(xiàn),本來(lái)我是想用攔截器寫(xiě)的,但是初始邏輯不好判斷,這里采用過(guò)濾器給出解決辦法:
1.創(chuàng)建AuthenticationFilter類:
package buka;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class AuthenticationFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
// 獲取請(qǐng)求路徑
String requestURI = httpRequest.getRequestURI();
System.out.println("Filter Request URI: " + requestURI);
// 檢查用戶是否已登錄
Object user = httpRequest.getSession().getAttribute("user");
if (user != null || requestURI.endsWith("login") || requestURI.endsWith("login.jsp") || requestURI.endsWith("register.jsp") || requestURI.endsWith("register")) {
chain.doFilter(request, response);
} else {
httpResponse.sendRedirect("login.jsp");
}
}
@Override
public void destroy() {
}
}2.在web.xml中添加過(guò)濾器:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- Filters -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter>
<filter-name>authenticationFilter</filter-name>
<filter-class>buka.AuthenticationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>authenticationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Servlets -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>如此就大功告成了,上述兩個(gè)問(wèn)題都得到解決,項(xiàng)目的初始登錄與注冊(cè)就書(shū)寫(xiě)完畢
總結(jié)
到此這篇關(guān)于SpringMVC實(shí)現(xiàn)登錄與注冊(cè)功能的文章就介紹到這了,更多相關(guān)SpringMVC登錄與注冊(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SparkSQL中的JSON內(nèi)置函數(shù)全解析
你是否曾經(jīng)為處理JSON數(shù)據(jù)而頭疼?SparkSQL為我們提供了強(qiáng)大的內(nèi)置JSON函數(shù),讓JSON處理變得輕而易舉,本文將帶你深入了解這些函數(shù),感興趣的朋友一起看看吧2024-08-08
SpringBoot接入釘釘自定義機(jī)器人預(yù)警通知
本文主要介紹了SpringBoot接入釘釘自定義機(jī)器人預(yù)警通知,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
MyBatis中resultType和parameterType和resultMap使用總結(jié)
這篇文章主要介紹了MyBatis中resultType和parameterType和resultMap使用總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
詳解如何使用MongoDB+Springboot實(shí)現(xiàn)分布式ID的方法
這篇文章主要介紹了詳解如何使用MongoDB+Springboot實(shí)現(xiàn)分布式ID的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

