软件编程
位置:首页>> 软件编程>> java编程>> Springboot初始化项目并完成登入注册的全过程

Springboot初始化项目并完成登入注册的全过程

作者:万伏小太阳  发布时间:2023-07-31 15:09:09 

标签:springboot,初始化项目,注册

idea spring Initializr创建项目

Springboot初始化项目并完成登入注册的全过程

勾选项目所需要的依赖

pom.xml文件会加载勾选的依赖,也可以不勾选后面通过自己常用的pom.xml统一导入。

Springboot初始化项目并完成登入注册的全过程

  • Lombok 可以通过注解省去一些get,set方法。

简单项目常用pom.xml:

mybatis-plus、mybatis、

整体项目结构

Springboot初始化项目并完成登入注册的全过程

创建User实体类放入Enity下

@TableName("user")是实体对应的表的名字

@TableId(type = IdType.AUTO)表的主键

@TableField(exist = false)不存在,就不会返回空。

package com.example.community.enity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("user")
public class User {
   @TableId(type = IdType.AUTO)
   private Integer userId;
   private String email;
   private String username;
   private String password;
   private String avatar;
   private String phone;
   @TableField(exist = false)
   private String code;
   public User(String email, String password) {
       this.email = email;
       this.password = password;
   }
}

创建通用返回的结果类

可以使用泛型传入对应的实体类,这里我就不传了。

package com.example.community.common;
import lombok.Data;
@Data
public class R {
   private Integer code;
   private String msg;
   private Object data;
public R(Integer code, String msg, Object ob) {
       this.code = code;
       this.msg = msg;
       this.data = ob;
   }
   public R(Integer code, String msg) {
       this.code = code;
       this.msg = msg;
   }
   public static  R success(String msg){
       R r= new R(1,msg);
       return r;
   }
   public static  R success(String msg,Object ob){
       R r= new R(1,msg,ob);
       return r;
   }
public static  R error(String msg){
       R r= new R(0,msg,null);
       return r;
   }
}

创建controller

在controller里可以对前端的请求进行一个分发,处理。根据地址链接找到对应的controller。

登入模块,可以创建一个UserController处理用户的相关信息。

package com.example.community.controller;
import com.example.community.common.R;
import com.example.community.enity.User;
import com.example.community.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpSession;
import java.util.Map;
@Slf4j
@RestController()
@RequestMapping("/user")
@CrossOrigin(origins = {"http://localhost:8090", "null"})
public class UserController {
   @Autowired
   UserService service;
@PostMapping("/login")
   public R login(@RequestBody User user) {
       log.info("user"+user.toString());
       return service.login(user.getEmail(), user.getPassword());
   }
@PostMapping("/register")
   @ResponseBody
   public R register(@RequestBody Map

创建service层

service层给controller层提供服务,调用daomapper查询数据库的数据,提供相对应的服务。

在这里我是用了mybtis-plus来进行数据库简单的查询。

用户模块的service层代码:

UserService接口

继承mybatis-plusIService

package com.example.community.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.community.common.R;
import com.example.community.enity.User;
public interface UserService extends IService

UserService实现类

在这个类中,调用了mapper提供的方法。

继承ServiceImpl

package com.example.community.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.community.Mapper.UserMapper;
import com.example.community.common.R;
import com.example.community.enity.User;
import com.example.community.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl

创建Mapper / Dao层

使用了mybatis-plus,所以只需要继承BaseMapper既可。

package com.example.community.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.community.enity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper

邮箱验证码、生成Token

  • 使用邮箱进行登入验证码验证

  • 使用jwt生成token返回给前端,服务端可以用来判断用户是否登入。并且支持跨域

实现这两个功能需要使用到一些工具类和配置,如下:

package com.example.community.utils;
import io.jsonwebtoken.Jwt;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class JWTUtils {
private static final String jwtToken = "123456Mszlu!@#$$";
public static String createToken(Long userId) {
       Map

* 的配置

package com.example.community.handler;
import com.alibaba.druid.util.StringUtils;
import com.example.community.common.R;
import com.example.community.utils.JsonUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
@Override
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws  Exception{
       log.info("请求被拦截{}",request);
if(!(handler instanceof HandlerMethod)){
           return true;
       }
       String token = request.getHeader("Authorization");
       log.info("token:{}",token);
       if(StringUtils.isEmpty(token)){
           R r= R.error("未登录");
           response.setContentType("application/json;charset=utf-8");
           log.info("{}",r);
           response.getWriter().print(JsonUtil.objectToJson(r));
           return false;
       }
return true;
   }
}
package com.example.community.config;
import com.example.community.handler.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
   @Override
   public void addInterceptors(InterceptorRegistry registry) {
       // 用户 *
       registry.addInterceptor(new LoginInterceptor())
               // 需要拦截的请求
               .addPathPatterns("/user/**","/article/**")
               // 需要放行的请求
               .excludePathPatterns("/user/login","/user/register","/mail/**")
               // 添加swagger-ui的放行路径
               .excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**", "/doc.html/**")
       ;
   }
   @Override
   public void addCorsMappings(CorsRegistry registry) {
       registry.addMapping("/**")
               .allowedOriginPatterns("*")
               .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
               .maxAge(3600)
               .allowCredentials(true);
   }
}

实现邮箱认证登入,之前写过一个,传送门

来源:https://blog.csdn.net/weixin_51009975/article/details/127510534

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com