📜  Spring Security登录注销(1)

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

Spring Security登录注销

简介

Spring Security是由Spring框架提供的安全框架,主要用来保护Spring应用程序中的资源。Spring Security可以提供基于表单的身份验证、HTTP基本身份验证、Remember-Me身份验证、基于注释的安全性和访问控制。

本文将介绍如何在Spring Security中实现基于表单的身份验证和注销功能。

基于表单的身份验证
配置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,编写登录页面和控制器即可实现登录和注销功能。