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

SpringMVC實(shí)現(xiàn)登錄與注冊功能的詳細(xì)步驟

 更新時間:2024年11月06日 08:28:03   作者:花開正值飄雨季  
本文介紹了如何通過Maven配置依賴,創(chuàng)建前端登錄和注冊頁面,并實(shí)現(xiàn)后端邏輯,詳細(xì)步驟包括配置文件、創(chuàng)建User類、配置中文過濾器及DispatcherServlet,并使用Spring?MVC和JQuery處理前端請求,需要的朋友可以參考下

一.準(zhǔn)備工作

1.通過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> <!-- 請根據(jù)你的項目需要調(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 />

這是為了開啟包掃描以使用注解

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.配置中文過濾器以及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>


 

二.登陸頁面的實(shí)現(xiàn)

1.先簡單寫出前端頁面,在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請求:

這里需要引入jquery,由于我本地有jquery的靜態(tài)文件,所以這里我直接將它放進(jìn)webapp下引入使用,大家如果沒有可以使用CDN,即<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>也可正常運(yùn)行

注意由于springMVC默認(rèn)會將webapp下的文件識別為頁面格式,如果這是不做任何處理直接使用的jquery的話會出現(xiàn)404,所以要配置資源處理器,聲明該文件為靜態(tài)資源:

在對應(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層開始書寫,考慮登錄功能要從數(shù)據(jù)庫中查詢對應(yīng)用戶信息是否存在,所以在這之前應(yīng)有數(shù)據(jù)庫:

(1)在Dao層添加代碼:

這段代碼比較簡單,就是查詢并根據(jù)每一行數(shù)據(jù)創(chuàng)建User,最后返回一個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)寫Service層邏輯:

將傳入的數(shù)據(jù)與Dao層返回的用戶列表一一進(jìn)行比對,如果比對成功就返回true,否則證明數(shù)據(jù)庫中沒有這個用戶

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)寫Controller層:

添加地址映射,接受前端參數(shù),如果登陸成功,將用戶名存儲到session域(后面會有用),進(jì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) {
            // 登錄成功后將用戶信息存儲到Session中
            request.getSession().setAttribute("user", username);
            response.sendRedirect("success.jsp");
        } else {
            response.sendRedirect("login.jsp");
        }
    }
}

(4)進(jìn)行測試:

如此證明功能沒有問題,事實(shí)上現(xiàn)在已經(jīng)實(shí)現(xiàn)了登錄功能,但是為了體現(xiàn)異步編程,我們使用ajax發(fā)送請求,修改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("登錄失敗,請重試!");
                }
            }
        })
    });

</script>
</html>

效果上應(yīng)該是不變的。

三.注冊功能的實(shí)現(xiàn)

1.前端頁面:

實(shí)際上我們把登陸的頁面簡單修改一下就可以:

在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>注冊</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.對登陸頁面的注冊按鈕添加點(diǎn)擊事件:

當(dāng)點(diǎn)擊注冊按鈕時跳轉(zhuǎn)到register.jsp頁面

注意,由于注冊按鈕寫在了form里面,當(dāng)點(diǎn)擊按鈕時,默認(rèn)會發(fā)起提交,這里要阻止表單的默認(rèn)行為,在login.jsp中添加:

$("#register").click((event) => {
        event.preventDefault(); // 阻止表單的默認(rèn)提交行為
        window.location.href = "register.jsp";
    });

3.創(chuàng)建后端文件:

(1)在Dao層添加代碼:

由于注冊用戶相當(dāng)于向數(shù)據(jù)庫中添加用戶,所以重要的部分就是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)寫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)寫Controller層:

添加地址映射,判斷是否添加成功以進(jìn)行頁面跳轉(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) {
            // 登錄成功后將用戶信息存儲到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)行測試:

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

如此注冊功能書寫完畢。

四.路由問題考慮

  • 問題一:我們每次開啟項目,都會去index.jsp頁面,按理來說我應(yīng)該直接來到登陸頁面
  • 問題二:我登陸后訪問success.jsp等其他頁面這沒有問題,但是當(dāng)我未登陸的時候,無論我想訪問那個頁面都應(yīng)該自動跳轉(zhuǎn)回登陸頁面,也就是說未登錄時我只能訪問login.jsp和register.jsp

解決方案:在之前書寫Controller層時,當(dāng)用戶登陸成功時,我們將用戶名信息存儲到了session域中,我們可以通過檢測session域是否有值來進(jìn)行頁面控制,可是如何控制?這里我們用過濾器實(shí)現(xiàn),本來我是想用攔截器寫的,但是初始邏輯不好判斷,這里采用過濾器給出解決辦法:

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;

        // 獲取請求路徑
        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中添加過濾器:

<!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>

如此就大功告成了,上述兩個問題都得到解決,項目的初始登錄與注冊就書寫完畢

總結(jié)

到此這篇關(guān)于SpringMVC實(shí)現(xiàn)登錄與注冊功能的文章就介紹到這了,更多相關(guān)SpringMVC登錄與注冊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SparkSQL中的JSON內(nèi)置函數(shù)全解析

    SparkSQL中的JSON內(nèi)置函數(shù)全解析

    你是否曾經(jīng)為處理JSON數(shù)據(jù)而頭疼?SparkSQL為我們提供了強(qiáng)大的內(nèi)置JSON函數(shù),讓JSON處理變得輕而易舉,本文將帶你深入了解這些函數(shù),感興趣的朋友一起看看吧
    2024-08-08
  • Java操作ElasticSearch的實(shí)例詳解

    Java操作ElasticSearch的實(shí)例詳解

    Elasticsearch?是一個分布式的搜索和分析引擎,廣泛用于全文搜索、日志分析等場景,本文將介紹如何在?Java?應(yīng)用中使用?Elasticsearch?客戶端來連接和操作?Elasticsearch?集群,希望對大家有所幫助
    2025-01-01
  • SpringBoot接入釘釘自定義機(jī)器人預(yù)警通知

    SpringBoot接入釘釘自定義機(jī)器人預(yù)警通知

    本文主要介紹了SpringBoot接入釘釘自定義機(jī)器人預(yù)警通知,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Mac上配置JDK?1.8的超詳細(xì)流程

    Mac上配置JDK?1.8的超詳細(xì)流程

    相信每個拿到MAC的小伙伴都是很欣喜的,但是由于MAC系統(tǒng)與WIN系統(tǒng)有著極大的不同,所以使用起來會有一些小困擾,這篇文章主要給大家介紹了關(guān)于Mac上配置JDK?1.8的超詳細(xì)流程,需要的朋友可以參考下
    2023-11-11
  • MyBatis中resultType和parameterType和resultMap使用總結(jié)

    MyBatis中resultType和parameterType和resultMap使用總結(jié)

    這篇文章主要介紹了MyBatis中resultType和parameterType和resultMap使用總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • SpringBoot 中使用RabbtiMq?詳解

    SpringBoot 中使用RabbtiMq?詳解

    這篇文章主要介紹了SpringBoot 中使用RabbtiMq詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價價值,需要的朋友可以參考一下
    2022-07-07
  • 詳解如何使用MongoDB+Springboot實(shí)現(xiàn)分布式ID的方法

    詳解如何使用MongoDB+Springboot實(shí)現(xiàn)分布式ID的方法

    這篇文章主要介紹了詳解如何使用MongoDB+Springboot實(shí)現(xiàn)分布式ID的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • java 讀取本地文件實(shí)例詳解

    java 讀取本地文件實(shí)例詳解

    這篇文章主要介紹了java 讀取本地文件實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Java 條件控制與循環(huán)控制實(shí)例

    Java 條件控制與循環(huán)控制實(shí)例

    下面小編就為大家?guī)硪黄狫ava 條件控制與循環(huán)控制實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java棋類游戲?qū)嵺`之單機(jī)版五子棋

    Java棋類游戲?qū)嵺`之單機(jī)版五子棋

    這篇文章主要為大家詳細(xì)介紹了Java棋類游戲中的五子棋實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-02-02

最新評論