📜  基于Spring Security表单的身份验证(1)

📅  最后修改于: 2023-12-03 15:08:07.615000             🧑  作者: Mango

基于Spring Security表单的身份验证

Spring Security是一个强大的安全框架,可帮助保护Java Web应用程序。本文将介绍如何使用Spring Security进行基于表单的身份验证。

步骤1:添加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>
步骤2:配置Spring Security

在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元素定义了如何从内存中找到用户。
步骤3:编写登录页面

您需要编写一个登录页面来收集用户凭证。以下代码展示了一个简单的登录页面:

<!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>

该表单需要向/loginURL提交POST请求,并具有名为usernamepassword的输入字段。

步骤4:编写安全配置

为了在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定义如何进行身份验证。

步骤5:运行应用程序

现在,您可以运行应用程序并在登录页面上输入用户名和密码。如果用户名和密码是正确的,用户将被重定向到指定的默认URL。否则,将显示错误消息并返回到登录页面。