Spring Boot實現一致性Session應用實例

初始化項目

1、新建一個 Spring Boot 項目,默認添加 web、redis模塊,然後等待構建完成,完成後目錄結構如下:

.
├── HELP.md
├── login-session-demo.iml
├── mvnw
├── mvnw.cmd
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   ├── resources
│   │   └── webapp
│   └── test
│       └── java
└── target

pom文件

其中,pom.xml內容如下

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.terwergreen</groupId>
    <artifactId>login-session-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>login-session-demo</name>
    <description>login-session-demo</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

創建登錄控制器

2、創建 LoginController , 添加 @Controller 註解,並添加對應的方法

/**
 * 登錄控制器
 *
 * @name: LoginController
 * @author: terwer
 * @date: 2022-01-24 16:36
 **/
@RequestMapping("/login")
@Controller
public class LoginController {

    @RequestMapping(value = "/toLogin", method = RequestMethod.GET)
    public String toLogin() {
        return "login";
    }

    @RequestMapping(value = "login", method = RequestMethod.POST)
    public String login(String username, String password) {
        if ("test".equals(username) && "test".equals(password)) {
            return "redirect:/result.jsp";
        }

        return "login";
    }
}

配置模板路徑映射

3、配置 application.properties ,設置端口,springmvc的jsp模板前綴和後綴

server.port=8081

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

然後在main下面新增webapp/WEB-INF/jsp目錄

再新建 login.jsp 文件。

4、此時會發生問題,訪問 http://localhost:8081/login/toLogin 報錯 404,控制檯打印

原因:默認不支持jsp。需要在pom.xml加入下面的jar包以支持jsp

<!--jsp頁面使用jstl標籤 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>

<!--用於編譯jsp -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

重新加載pom.xml,然後重啓項目,再次訪問 http://localhost:8081/login/toLogin ,正確出現頁面

熱部署

5、添加熱部署

爲了修改文件能夠及時看到效果,可以添加熱部署插件。

<!-- 熱部署 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

添加攔截器實現登錄驗證

6、添加攔截器進行登錄驗證

創建登錄攔截器

/**
 * 登錄攔截器
 *
 * @name: LoginInterceptor
 * @author: terwer
 * @date: 2022-01-24 17:46
 **/
@Component
public class LoginInterceptor implements HandlerInterceptor {

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    /**
     * 利用Session校驗登錄狀態實現登錄攔截
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        logger.info("進入登錄攔截器");
        HttpSession session = request.getSession();
        Object username = session.getAttribute(Constant.SESSION_USERNAME_KEY);
        if (null == username) {
            logger.info("未登錄或者登錄失效");
            response.sendRedirect(request.getContextPath() + "/login/toLogin");
            return false;
        }

        logger.info("從Session中獲取的登錄名:" + username);
        return true;
    }
}

註冊登錄攔截器到Spring Boot中去

/**
 * Spring  MVC自定義配置
 *
 * @name: MyWebMvcConfigAdaptor
 * @author: terwer
 * @date: 2022-01-24 17:51
 **/
@Configuration
public class MyWebMvcConfigAdaptor implements WebMvcConfigurer {

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private LoginInterceptor loginInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 註冊攔截器
        // 默認攔截所有
        // 排除登錄頁面本身還有錯誤頁面
        registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/login/**", "/error");

        logger.info("登錄攔截器已添加");
    }
}

集成mybatis

7、集成mybatis

session保存到redis

部署驗證

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章