📅  最后修改于: 2023-12-03 15:08:07.615000             🧑  作者: Mango
Spring Security是一个强大的安全框架,可帮助保护Java Web应用程序。本文将介绍如何使用Spring Security进行基于表单的身份验证。
要使用Spring Security,需要将其依赖项添加到项目中。在Maven项目中,可以将以下依赖项添加到pom.xml文件中:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.4.1</version>
</dependency>
在Spring配置文件中配置Spring Security。以下代码展示了一个简单的配置:
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/secure/**" access="hasRole('ROLE_ADMIN')" />
<form-login login-page="/login" default-target-url="/dashboard" authentication-failure-url="/login?error" />
<logout logout-success-url="/login?logout" />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="admin" password="password" authorities="ROLE_ADMIN" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
此配置中定义了以下内容:
http
元素定义了需要保护的URL,以及如何处理身份验证和授权。intercept-url
元素定义了保护的URL和需要的角色。form-login
元素定义了登录页面、登录后重定向到的默认URL和进行身份验证失败时重新定向的URL。logout
元素定义了注销URL和注销成功后重定向的URL。authentication-manager
元素定义了如何进行身份验证。user-service
元素定义了如何从内存中找到用户。您需要编写一个登录页面来收集用户凭证。以下代码展示了一个简单的登录页面:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login Page</title>
</head>
<body>
<h2>Login Page</h2>
<form name="loginForm" action="/login" method="POST">
<p>
<label for="username">Username:</label>
<input type="text" id="username" name="username" />
</p>
<p>
<label for="password">Password:</label>
<input type="password" id="password" name="password" />
</p>
<input type="submit" value="Submit" />
</form>
</body>
</html>
该表单需要向/login
URL提交POST请求,并具有名为username
和password
的输入字段。
为了在Spring应用程序中启用安全性,必须创建一个WebSecurityConfigurerAdapter
类并使用@EnableWebSecurity
注释。以下代码演示了一个简单的配置:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/secure/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login").defaultSuccessUrl("/dashboard")
.failureUrl("/login?error")
.and()
.logout().logoutSuccessUrl("/login?logout");
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin").password("{noop}password").roles("ADMIN");
}
}
此配置的configure
方法定义了如何保护URL,并定义了登录和注销URL的位置。另一个方法configureGlobal
定义如何进行身份验证。
现在,您可以运行应用程序并在登录页面上输入用户名和密码。如果用户名和密码是正确的,用户将被重定向到指定的默认URL。否则,将显示错误消息并返回到登录页面。