springboot后端代码分析 websecurityconfig

               .and()
                //这里必须要写formLogin(),不然原有的UsernamePasswordAuthenticationFilter不会出现,也就无法配置自定义的UsernamePasswordAuthenticationFilter
                .formLogin()
                .loginPage("/login_page")
                .loginProcessingUrl("/login")
                .usernameParameter("username")
                .passwordParameter("password")
                .successHandler(successHandler)
                .failureHandler(failureHandler)
                .permitAll()
loginProcessingUrl("/login"): 这行代码指定了Spring Security应该监听哪个URL以处理登录请求。当客户端发送POST请求到/login时,Spring Security会拦截并调用UsernamePasswordAuthenticationFilter来处理这个请求。

 .and()
.addFilterAt(jsonAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)

这里调用这个后,同时自定义JsonAuthenticationFilter添加到了Spring Security的过滤器链中,并替换了默认的UsernamePasswordAuthenticationFilter。当请求到达/login时,将由JsonAuthenticationFilter来处理


loginPage("/login_page"): 指定登录页面的URL,当用户尝试访问受保护的资源但尚未登录时,会被重定向到此页面

登录成功与失败处理

    public JsonAuthenticationFilter jsonAuthenticationFilter() throws Exception {
        JsonAuthenticationFilter filter = new JsonAuthenticationFilter();
        filter.setAuthenticationSuccessHandler(successHandler);
        filter.setAuthenticationFailureHandler(failureHandler);
        filter.setFilterProcessesUrl("/login");
        filter.setAuthenticationManager(authenticationManagerBean());
        return filter;
    }

当登录成功时,会调用successHandler来处理后续操作,如重定向或返回响应
如果登录失败,则调用failureHandler来处理错误,如显示错误消息或重定向到错误页面

### Spring Boot 实现登录接口的后端逻辑 在Spring Boot中实现用户认证和授权的核心在于使用Spring Security框架。以下是关于如何构建一个简单的登录接口并处理用户认证的后端逻辑。 #### 1. 创建Spring Boot项目 首先,创建一个新的Spring Boot项目,并引入必要的依赖项,包括`spring-boot-starter-security`和`spring-boot-starter-data-jpa`等[^5]。 ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- 数据库驱动 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> </dependencies> ``` #### 2. 定义用户实体类 为了存储用户的用户名、密码和其他信息,可以定义一个`User`实体类,并将其映射到数据库表中。 ```java import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String username; private String password; private boolean enabled; // Getters and Setters } ``` #### 3. 配置Spring Security 配置Spring Security以支持基于表单的身份验证,并指定哪些URL需要身份验证[^4]。 ```java 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.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/", "/home").permitAll() // 不需要认证即可访问的路径 .anyRequest().authenticated() // 所有其他请求都需要认证 .and() .formLogin() .loginPage("/login") // 自定义登录页面 .defaultSuccessUrl("/") // 登录成功后的默认跳转地址 .permitAll() .and() .logout() .permitAll(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("user").password("{noop}password").roles("USER"); } } ``` #### 4. 构建控制器 创建一个控制器来处理登录请求以及其他受保护的资源请求[^3]。 ```java import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class LoginController { @GetMapping("/login") public String loginForm() { return "login"; // 返回登录视图名称 } @GetMapping("/") public String home() { return "index"; // 主页视图名称 } } ``` #### 5. 添加Thymeleaf模板引擎(可选) 如果想让前端更加美观,可以通过添加Thymeleaf作为模板引擎来渲染HTML页面。 ```html <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Login Page</title> </head> <body> <h1 th:text="${error != null ? 'Invalid Username or Password' : ''}" style="color:red;"></h1> <form method="post" action="/login"> <label for="username">Username:</label><br/> <input type="text" name="username"><br/><br/> <label for="password">Password:</label><br/> <input type="password" name="password"><br/><br/> <button type="submit">Login</button> </form> </body> </html> ``` 以上代码展示了如何利用Spring Boot快速搭建一个带有基本用户认证功能的应用程序。通过这些步骤,您可以轻松扩展应用程序的功能,例如增加更多复杂的权限控制或集成第三方OAuth提供商[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值