Spring Boot Form Security Example – Creating a custom Login Page
Trong bài hướng dẫn trước mình đã triển khai Spring Boot Security for a Form Application. Nó sử dụng trang Spring Login mặc định. Trong bài hướng dẫn này mình sẽ thêm trang custom login web. Khi đăng xuất, mình sẽ được chuyển đến trang login với một số thông báo đăng xuất.
Maven Project:
login.jsp:
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<c:set var="contextPath" value=""/>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="">
<meta name="author" content="">
<title>Log in with your credentials</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<form method="POST" action="/login" class="form-signin">
<h2 class="form-heading">Log in</h2>
<div class="form-group ">
<span></span>
<input name="username" type="text" class="form-control" placeholder="Username"
autofocus="true"/>
<input name="password" type="password" class="form-control" placeholder="Password"/>
<span></span>
<button class="btn btn-lg btn-primary btn-block" type="submit">Log In</button>
</div>
</form>
</div>
<!-- /container -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script></body>
</html>
Code language: HTML, XML (xml)
EmployeeController.java
package com.javainuse.controllers;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.javainuse.model.Employee;
import com.javainuse.service.EmployeeService;
@Controller
public class EmployeeController {
@Autowired
EmployeeService employeeService;
@RequestMapping("/welcome")
public ModelAndView firstPage() {
return new ModelAndView("welcome");
}
@RequestMapping(value = "/addNewEmployee", method = RequestMethod.GET)
public ModelAndView show() {
return new ModelAndView("addEmployee", "emp", new Employee());
}
@RequestMapping(value = "/addNewEmployee", method = RequestMethod.POST)
public ModelAndView processRequest(@ModelAttribute("emp") Employee emp) {
employeeService.insertEmployee(emp);
List<Employee> employees = employeeService.getAllEmployees();
ModelAndView model = new ModelAndView("getEmployees");
model.addObject("employees", employees);
return model;
}
@RequestMapping("/getEmployees")
public ModelAndView getEmployees() {
List<Employee> employees = employeeService.getAllEmployees();
ModelAndView model = new ModelAndView("getEmployees");
model.addObject("employees", employees);
return model;
}
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login(Model model, String error, String logout) {
if (error != null)
model.addAttribute("errorMsg", "Your username and password are invalid.");
if (logout != null)
model.addAttribute("msg", "You have been logged out successfully.");
return "login";
}
}
Code language: JavaScript (javascript)
EmployeeSecurityConfiguration.java
package com.javainuse.config;
import org.springframework.beans.factory.annotation.Autowired;
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.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class EmployeeSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/resources/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/").permitAll().antMatchers("/welcome").hasAnyRole("USER", "ADMIN")
.antMatchers("/getEmployees").hasAnyRole("USER", "ADMIN").antMatchers("/addNewEmployee")
.hasAnyRole("ADMIN").anyRequest().authenticated()
.and().formLogin().loginPage("/login").permitAll()
.and().logout().permitAll();
http.csrf().disable();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder authenticationMgr) throws Exception {
authenticationMgr.inMemoryAuthentication().withUser("admin").password("admin").authorities("ROLE_USER").and()
.withUser("javainuse").password("javainuse").authorities("ROLE_USER", "ROLE_ADMIN");
}
}
Code language: JavaScript (javascript)
- Chạy ứng dụng và truy cập localhost:8080/welcome, chúng ta sẽ được đến trang login
- Nhập sai mật khẩu.
- Khi đăng xuất, chúng tôi nhận được màn hình như sau
Nguồn:
https://www.javainuse.com/spring/boot_form_security_custom_login
Leave a Reply