初始化項目
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