📅  最后修改于: 2023-12-03 15:35:03.620000             🧑  作者: Mango
Spring Security是由Spring框架提供的安全框架,主要用来保护Spring应用程序中的资源。Spring Security可以提供基于表单的身份验证、HTTP基本身份验证、Remember-Me身份验证、基于注释的安全性和访问控制。
本文将介绍如何在Spring Security中实现基于表单的身份验证和注销功能。
首先,在Spring项目中添加Spring Security依赖:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.4.2</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.4.2</version>
</dependency>
然后,在Spring配置文件中配置Spring Security:
<security:http auto-config="true">
<security:intercept-url pattern="/login" access="permitAll" />
<security:intercept-url pattern="/**" access="hasRole('USER')" />
<security:form-login login-page="/login" default-target-url="/home"
authentication-failure-url="/login?error" />
<security:logout logout-success-url="/login?logout" />
</security:http>
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="admin" password="{noop}admin123" authorities="ROLE_USER" />
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
上述配置文件中的关键点如下所示:
intercept-url
标签用于配置访问控制,pattern
属性指定了需要控制的URL模式,access
属性指定了允许访问该URL模式的权限。form-login
标签用于配置基于表单的身份验证,login-page
属性指定了登录页面的路径,default-target-url
属性指定了登录成功后跳转的路径,authentication-failure-url
属性指定了登录失败后跳转的路径。logout
标签用于配置注销功能,logout-success-url
属性指定了注销成功后跳转的路径。authentication-manager
标签用于配置用户认证,user-service
标签用于配置用户信息,包括用户名、密码和角色权限。在Web应用程序中添加一个登录页面,包括用户名和密码的输入框和一个提交按钮:
<form action="/login" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username" />
<label for="password">Password:</label>
<input type="password" id="password" name="password" />
<input type="submit" value="Login" />
</form>
在Web应用程序中添加一个Spring MVC控制器,用于处理登录页面的登录请求和注销请求:
@Controller
public class LoginController {
@GetMapping("/login")
public String login() {
return "login";
}
@GetMapping("/home")
public String home() {
return "home";
}
@GetMapping("/logout")
public String logout(HttpServletRequest request, HttpServletResponse response) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null) {
new SecurityContextLogoutHandler().logout(request, response, authentication);
}
return "redirect:/login?logout";
}
}
其中,login()
方法用于返回登录页面的视图;home()
方法用于返回登录成功后的首页视图;logout()
方法用于处理注销请求,首先从安全上下文中获取当前用户信息,然后注销该用户,最后重定向到登录页面并带上注销成功的提示信息。
本文介绍了如何在Spring Security中实现基于表单的身份验证和注销功能。通过配置Spring Security,编写登录页面和控制器即可实现登录和注销功能。