Spring Boot + Security Hello world Example
Trong bài đăng này, mình cấu hình một spring boot application để thêm authorization và authentication cơ bản.
Maven Project:
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.javainuse</groupId>
<artifactId>SpringBootHelloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>SpringBootHelloWorld</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</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-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Code language: HTML, XML (xml)
Không cho phép thêm bất kỳ cấu hình bảo mật nào và chạy mã này.
Truy cập http://localhost:8080/listEmployees.html
Chúng ta có thể thấy rằng không có cấu hình bảo mật nào được thêm vào, nó vẫn yêu cầu mật khẩu tên người dùng. Đây là hành vi được mong đợi. Chúng ta sẽ thấy rằng mật khẩu được hệ thống tạo ra khi chúng ta chạy ứng dụng khởi động.
Do đó, chỉ cần thêm Spring boot security starter dependency, bảo mật cơ bản đã được cấu hình theo mặc định.
Cho phép tùy chỉnh cấu hình bảo mật bằng cách viết authorization và authentication riêng cho nó. Đối với điều này, hãy tạo một class SecurityConfig mới extends WebSecurityConfigurerAdapter và ghi đè các phương thức của nó.
package com.javainuse.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("javainuse")
.password("javainuse").roles("USER");
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.antMatcher("/**").authorizeRequests().anyRequest().hasRole("USER")
.and().formLogin().loginPage("/login.jsp")
.failureUrl("/login.jsp?error=1").loginProcessingUrl("/login")
.permitAll().and().logout()
.logoutSuccessUrl("/listEmployees.html");
}
}
Code language: CSS (css)
Mình đã thêm 1 trang mới có tên là login.jsp. Người dùng sẽ được chuyển hướng đến trang này để thêm thông tin đăng nhập.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
<title>Employees Login</title>
</head>
<body>
<h1><strong>Employees Login</strong></h1>
<c:url value="/login" var="login"/>
<form:form action="" method="post">
<label>Username:</label> <input type="text" name="username" />
<label>Password:</label> <input type="text" name="password" />
<input type="submit"/>
</form:form>
</body>
</html>
Code language: HTML, XML (xml)
Đây là những thay đổi duy nhất được yêu cầu. Chạy ứng dụng. Truy cập http://localhost:8080/listEmployees.html
Người dùng sẽ được tự động chuyển hướng đến localhost:8080/login.jsp
Khi nhập tên người dùng và mật khẩu là ‘javainuse’, người dùng sẽ có thể truy cập chính xác tất cả các URL khác.
Nguồn:
Leave a Reply