当前位置: 首页 > wzjs >正文

网站怎么做双语种青岛网站推广哪家便宜

网站怎么做双语种,青岛网站推广哪家便宜,做网站用 jsp还是asp,wordpress logo图片在 Web 应用开发中,用户认证是保障系统安全的基础需求。Spring Boot 3.4.3 结合 Spring Security 6.4.2 提供了强大的安全框架支持,可以轻松实现基于内存或数据库的用户认证功能。本文将详细介绍如何在 Spring Boot 3.4.3 中集成 Spring Security 6.4.2&…

在 Web 应用开发中,用户认证是保障系统安全的基础需求。Spring Boot 3.4.3 结合 Spring Security 6.4.2 提供了强大的安全框架支持,可以轻松实现基于内存或数据库的用户认证功能。本文将详细介绍如何在 Spring Boot 3.4.3 中集成 Spring Security 6.4.2,通过内存和 MySQL 两种方式实现用户认证,并附上完整代码示例,助你在2025年的项目中快速构建安全的认证系统。


1. Spring Security 简介
1.1 什么是 Spring Security?

Spring Security 是 Spring 生态中的安全框架,提供认证、授权和防护功能。Spring Security 6.4.2 支持 Lambda 风格的配置,与 Spring Boot 3.4.3 无缝集成,适合现代 Java 开发。

1.2 认证方式
  • 内存认证:将用户信息存储在内存中,适合测试或简单应用。
  • 数据库认证:通过 MySQL 等数据库存储用户信息,适合生产环境。
1.3 本文目标
  • 实现基于内存的用户认证。
  • 配置 MySQL 数据库认证。
  • 提供登录和受保护接口示例。

2. 项目实战

以下是基于 Spring Boot 3.4.3 和 Spring Security 6.4.2 实现内存和 MySQL 用户认证的完整步骤。

2.1 添加 Maven 依赖

pom.xml 中添加必要的依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.3</version></parent><groupId>cn.itbeien</groupId><artifactId>springboot-security-auth</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Security --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><!-- MySQL 和 JPA --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency></dependencies>
</project>

说明:

  • spring-boot-starter-security:提供认证和授权支持。
  • spring-boot-starter-data-jpamysql-connector-j:用于 MySQL 数据库集成。
2.2 配置内存认证
Security 配置类
package cn.joyous.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;@Configuration
@EnableWebSecurity
public class SecurityConfig {@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests(auth -> auth.requestMatchers("/public").permitAll() // 公开接口.anyRequest().authenticated() // 其他需认证).formLogin(form -> form.defaultSuccessUrl("/home") // 登录成功跳转).logout(logout -> logout.logoutSuccessUrl("/public") // 退出后跳转);return http.build();}@Beanpublic UserDetailsService userDetailsService() {var user = User.withUsername("admin").password("{noop}123456") // {noop} 表示明文密码.roles("USER").build();return new InMemoryUserDetailsManager(user);}
}

说明:

  • InMemoryUserDetailsManager:内存存储用户。
  • {noop}:不加密密码,仅用于测试。
2.3 配置 MySQL 认证
数据源配置

application.yml 中配置 MySQL:

spring:datasource:url: jdbc:mysql://localhost:3306/auth_db?useSSL=false&serverTimezone=UTCusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverjpa:hibernate:ddl-auto: update # 自动建表show-sql: true
用户实体类
package cn.joyous.entity;import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import lombok.Data;@Entity
@Data
public class User {@Idprivate Long id;private String username;private String password;private String role;
}
用户 Repository
package cn.joyous.repository;import cn.itbeien.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;/*** @author itbeien*/
public interface UserRepository extends JpaRepository<User, Long> {User findByUsername(String username);
}
自定义 UserDetailsService
package cn.joyous.service;import cn.joyous.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class CustomUserDetailsService implements UserDetailsService {@Autowiredprivate UserRepository userRepository;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {User user = userRepository.findByUsername(username);if (user == null) {throw new UsernameNotFoundException("用户不存在");}return org.springframework.security.core.userdetails.User.withUsername(user.getUsername()).password(user.getPassword()).roles(user.getRole()).build();}
}
更新 Security 配置
package cn.joyous.config;import cn.joyous.service.CustomUserDetailsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;@Configuration
@EnableWebSecurity
public class SecurityConfig {@Autowiredprivate CustomUserDetailsService userDetailsService;@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests(auth -> auth.requestMatchers("/public").permitAll().anyRequest().authenticated()).formLogin(form -> form.defaultSuccessUrl("/home")).logout(logout -> logout.logoutSuccessUrl("/public"));return http.build();}@Beanpublic UserDetailsService userDetailsService() {return userDetailsService;}
}
2.4 创建控制器

提供测试接口:

package cn.joyous.controller;import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HomeController {@GetMapping("/public")public String publicEndpoint() {return "这是一个公开接口";}@GetMapping("/home")public String home(@AuthenticationPrincipal UserDetails userDetails) {return "欢迎, " + userDetails.getUsername() + "!";}
}
2.5 数据库准备

创建 auth_db 数据库,插入测试数据:

INSERT INTO user (id, username, password, role) VALUES (1, 'admin', '{noop}123456', 'USER');
2.6 启动与测试
  1. 启动 Spring Boot 应用。
  2. 访问 http://localhost:8080/public,无需登录。
  3. 访问 http://localhost:8080/home,跳转到登录页。
  4. 输入 admin123456,登录后显示欢迎信息。

3. 进阶功能(可选)
  1. 密码加密
    使用 BCrypt 加密密码:

    @Bean
    public PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();
    }
    

    更新用户密码为加密值:

    INSERT INTO user (id, username, password, role) VALUES (1, 'admin', '$2a$10$...', 'USER');
    
  2. 自定义登录页
    添加 Thymeleaf 模板 login.html 并配置:

    .formLogin(form -> form.loginPage("/login").permitAll())
    
  3. 角色权限
    配置基于角色的访问控制:

    .authorizeHttpRequests(auth -> auth.requestMatchers("/admin/**").hasRole("ADMIN").requestMatchers("/user/**").hasRole("USER").anyRequest().authenticated()
    )
    

4. 总结

Spring Boot 3.4.3 和 Spring Security 6.4.2 结合内存和 MySQL 认证,为开发者提供了灵活的安全方案。本文从内存认证到数据库认证,覆盖了实现步骤。

http://www.dtcms.com/wzjs/577850.html

相关文章:

  • 大庆建设集团网站西安网页制作工作室
  • 北京网站搭建公司排行广州市住房与城乡建设部网站
  • 干净简约高端的网站建企业版网站多久
  • 网站未备案怎么访问域名怎么做网站内容
  • 连云港市建设局网站安全员考试wordpress按时间获取文章列表
  • 网站的风格指的是什么网站数据库安全
  • 宝安网站开发怎样提升企业网站的访问
  • 做照片有那些网站好阿里云网站建设基本流程
  • 邢台做wap网站的公司设计联盟网站
  • 重庆网站备案在那里国外网站建设模板
  • wordpress 文章保存在哪里seo网站页面f布局
  • 深圳商城手机网站建设广州全屋定制
  • 网站建设论文题目建网站的详细步骤
  • 国外网站推广重庆网站搭建公司
  • 呼玛网站建设新东方英语培训机构官网
  • 珠海营销营网站建设手机app用什么语言编写的
  • 网站首页怎么做ps电商网站设计是什么
  • 芜湖网站建设价格网站建设共享ip
  • 深圳做h5网站游戏推广怎么做挣钱
  • 制作网站免费建站新品手机发布会一览表
  • 网站seo其应用深圳建站公司
  • 淮安网站建设公司ppt下载网站哪个好
  • wordpress如何做导航网站各大网站推荐
  • 做百度移动端网站软件嘉兴市建设局网站
  • 黑群晖做php网站林州二建集团建设有限公司网站
  • 宁夏网站建设优化免费做全网解析电影网站赚钱
  • 苏州网站建设方案策划把自己做的网站传到网上
  • 网站建设力洋门户网站建设与开发
  • 建网站的客户公司起名免费网
  • 外贸网站违反谷歌规则建设网站的服务费是指什么意思