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

网站建设所采用的技术有专门做辩论的网站吗

网站建设所采用的技术,有专门做辩论的网站吗,百度联盟 网站备案信息,陕西省住房和建设厅官方网站欢迎来到一场技术与幽默交织的冒险!今天,我们将跳进 Spring Boot 的世界,探索如何通过 用户名、手机号、邮箱 等多种方式实现登录。想象一下,用户在登录时可以随心所欲地选择——就像你今天早上纠结到底是要喝美式咖啡还是拿铁&am…

欢迎来到一场技术与幽默交织的冒险!今天,我们将跳进 Spring Boot 的世界,探索如何通过 用户名手机号邮箱 等多种方式实现登录。想象一下,用户在登录时可以随心所欲地选择——就像你今天早上纠结到底是要喝美式咖啡还是拿铁!而我们要做的就是为他们提供这些选择,确保他们都能毫无阻碍地进入我们的系统。

目标? 用一种轻松而富有趣味的方式带你构建一个支持多种登录方式的 Spring Boot 项目!好了,系好安全带,让我们开始这段奇妙的代码之旅。

一、需求分析

首先,让我们明白我们要做什么。如果你还记得那些老式网站,登录方式非常单一:只允许使用用户名登录,且密码必须是8个字符的 “password123” 这种经典组合。好吧,时代已经不同了,现在的人们懒得记用户名和密码,他们更愿意使用手机、邮箱,甚至脸书、微信等社交账号来登录。为什么? 因为每个人都有点“懒得输入太多字”的心理。

因此,我们的目标很明确——让用户能有更多的选择方式来登录:

  1. 用户名 + 密码(这是经典款)
  2. 手机号 + 密码(这就很潮流了)
  3. 邮箱 + 密码(一看就很高端)

这就像在餐厅点菜——我们提供多样化的菜单,用户随便选,爱吃啥点啥!

二、搭建你的基础工程:项目配置

没有基础设施的建筑就是一场灾难,而没有配置文件的 Spring Boot 项目就是——废的。所以,第一步,我们要确保项目的所有配置正确无误。

在你的 pom.xml 文件中,加入我们即将用到的一些核心依赖。包括 Spring Security(因为我们要玩登录认证嘛)、JPA(因为我们要有地方存储用户信息),以及 MySQL 数据库的连接驱动。

<dependencies><!-- Spring Boot Security 依赖,用于管理我们的登录和认证 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><!-- Spring Boot Data JPA 依赖,用来进行数据库操作 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- Spring Boot Web 依赖,用来处理 Web 请求 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MySQL Connector 依赖,毕竟数据还是要放进数据库的 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- Lombok 用来减少代码量,让我们不用再写那些烦人的 getter/setter --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
</dependencies>

好了,既然我们已经有了正确的配置依赖,现在就像是我们已经准备好了一杯现磨咖啡,接下来该享受喝咖啡的过程了!

三、数据库设计:让用户信息有个家

每个登录系统都需要一个地方存储用户信息,否则它就像你早上出门忘了带钥匙一样尴尬。我们要创建一个用户表来保存用户名、手机号、邮箱以及密码。这里我们使用 JPA 来简化数据库操作,不必再写那些琐碎的 SQL 语句。

@Entity
@Table(name = "users")
@Data
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String username;      // 用户名private String password;      // 密码(重要的东西,当然要加密保存)private String email;         // 邮箱private String phoneNumber;   // 手机号
}

你可能会问,为什么不加个字段来存储用户的昵称、性别、兴趣爱好?嗯,那确实也是个不错的想法,但我们今天的重点是登录系统——所以先忍一忍,别跑偏了。

四、用户存储库:我们需要一些查询方式

数据库表已经有了,但我们还需要写一些代码来查询这些用户信息。为此,我们需要创建一个存储库类,用于根据用户名、手机号或者邮箱来查找用户。

public interface UserRepository extends JpaRepository<User, Long> {Optional<User> findByUsername(String username);Optional<User> findByEmail(String email);Optional<User> findByPhoneNumber(String phoneNumber);
}

瞧,这就是我们数据层的三剑客:findByUsernamefindByEmailfindByPhoneNumber。有了它们,我们可以方便地从数据库中查询到用户。

五、用户认证服务:让 Spring Security 成为我们的好帮手

接下来,我们要告诉 Spring Security 如何根据不同的登录信息来加载用户。这部分代码就像是一道考题,告诉系统:“嘿,如果用户输入了个手机号或者邮箱,你该如何处理?”

@Service
public class CustomUserDetailsService implements UserDetailsService {@Autowiredprivate UserRepository userRepository;@Overridepublic UserDetails loadUserByUsername(String loginInput) throws UsernameNotFoundException {Optional<User> userOpt;// 判断输入的登录信息类型,来确定是邮箱、手机号还是用户名if (loginInput.contains("@")) {// 邮箱登录userOpt = userRepository.findByEmail(loginInput);} else if (loginInput.matches("\\d+")) {// 手机号登录userOpt = userRepository.findByPhoneNumber(loginInput);} else {// 用户名登录userOpt = userRepository.findByUsername(loginInput);}// 如果用户不存在,抛出异常User user = userOpt.orElseThrow(() -> new UsernameNotFoundException("用户不存在"));// 返回 Spring Security 所需的 UserDetails 对象return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), new ArrayList<>());}
}

这个类做的事情就像是一个门卫,不管用户输入的是用户名、邮箱,还是手机号,都会验证一遍,确保用户是真实存在的。

六、密码加密:不要让用户的密码变成人人可知的小秘密

安全问题非常重要,如果我们把密码明文存储,那就相当于把家里的钥匙放在门口的地垫下面,绝对是个坏主意。幸运的是,Spring Security 自带了密码加密支持,我们可以使用 BCryptPasswordEncoder 来加密用户密码。

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

然后在用户注册时,对密码进行加密后再存入数据库:

@Service
public class UserService {@Autowiredprivate UserRepository userRepository;@Autowiredprivate PasswordEncoder passwordEncoder;public void registerUser(User user) {// 密码加密user.setPassword(passwordEncoder.encode(user.getPassword()));userRepository.save(user);}
}

有了这个小魔法,所有密码都会以加密形式存储,即便有人黑进了数据库,也只能看到一串毫无意义的字符。

七、Spring Security 配置:别忘了这位主角

一部电影怎么能没有导演?而我们的导演就是 Spring Security 的配置类。我们将在这里配置登录逻辑,告诉系统如何处理不同的登录方式。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Autowiredprivate CustomUserDetailsService userDetailsService;@Autowiredprivate PasswordEncoder passwordEncoder;@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {// 配置认证方式,使用我们自定义的 UserDetailsService 和密码加密方式auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder);}@Overrideprotected void configure(HttpSecurity http) throws Exception {// 设置允许哪些 URL 可以被匿名访问http.csrf().disable().authorizeRequests().antMatchers("/login", "/register").permitAll()  // 允许登录和注册页面被访问.anyRequest().authenticated()  // 其他页面都需要认证.and().formLogin().loginPage("/login")  // 设置自定义的登录页面.defaultSuccessUrl("/home", true)  // 登录成功后跳转的页面.permitAll().and().logout().permitAll();}
}

在这段配置中,我们告诉 Spring Security 使用我们自定义的 CustomUserDetailsService 来处理登录请求。我们还设置了登录页面和成功后的重定向页面,显得很专业有木有?

八、最后的话:为用户提供选择,登录就像选咖啡一样简单

现在,我们已经成功搭建了一个支持多种方式登录的系统。不论是使用用户名、手机号还是邮箱,用户都可以自由选择,就像他们早晨选择喝哪种咖啡一样简单。而你,作为这家“咖啡店”的老板,成功地提供了更多的便利和选择!

所以,下次当你看到用户轻松登录时,可以骄傲地拍拍自己的肩膀,毕竟,你让这个世界的登录系统变得更加多样化了。

(Ps:如果用户抱怨登录总是出错,请告诉他们密码不能用“123456”,那样实在太“平庸”了点 😜)

http://www.yayakq.cn/news/54828/

相关文章:

  • 建筑公司网站新闻营销型网站制作的目的是
  • seo上海网站推广网站开发与管理实验五
  • 青岛网站建设与设计制作如何做视频网站旗下账号
  • 汕头模版网站建设上海招聘网最新招聘
  • 辽icp备鞍山公司中企动力提供网站建设北京房地产网站建设
  • 微信网站开发公司网站开发到上线需要多久
  • 响应式网站制作教程学校网站建设阶段性目标
  • 如何创建网站赚钱商家入驻网站建设
  • 软件大全seo快速入门教程
  • 手机网站开发步骤软件seo和网络推广有什么区别
  • 什么网站上做奥数题湘西网站建设
  • 营销推广型网站常州做网站哪家便宜
  • 昆明移动网站建设企业邮箱域名
  • 住房和城建设网站郑州专业手机网站制作
  • 企业网站建设示范平台哈尔滨网站优化公司
  • 湖北网站建设优化大学生创业计划书完整版
  • 银川网站建设公司网页认证
  • 哪个网站课件做的比较好微信公众号用什么开发
  • 中国建设银行悦生活网站杭州公司社保缴纳比例
  • 新农村建设网站知乎请别人做网站签订合同
  • 无锡工程建设中心网站网站域名与网站首页网址
  • 哪些企业需要网站建设的wordpress安装页面
  • 聊天室网站开发北京品牌建设网站公司排名
  • WordPress适合做多大级别的网站银川网站seo
  • 某服装企业网站建设方案asp网站安全性
  • 网站后台免费模板南京 电子商务网站
  • html静态网站开发个人博客网站建设管理工作情况的通报
  • 深圳有哪些网站公司wordpress v
  • 一流的镇江网站建设山东进一步优化
  • 网站在线问答怎么做写一张营销型网站页面多长时间