
目录
1. springboot 整合全局异常、响应式封装类效验登录状态
2. springboot 整合全局异常 + 响应式封装类 + JSR303后端验证 + 自定义注解 效验登录状态
第一种方式采用springboot 整合全局异常 + 响应式封装类进行效验登录状态
第二种方式通过springboot 整合全局异常 + 响应式封装类 + JSR303后端验证 + 自定义注解效验 登录状态
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-freemarkerartifactId>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-jdbcartifactId>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
- <dependency>
- <groupId>org.mybatis.spring.bootgroupId>
- <artifactId>mybatis-spring-boot-starterartifactId>
- <version>2.2.2version>
- dependency>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <scope>runtimescope>
- <version>5.1.44version>
- dependency>
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <optional>trueoptional>
- dependency>
-
- <dependency>
- <groupId>org.apache.commonsgroupId>
- <artifactId>commons-lang3artifactId>
- <version>3.12.0version>
- dependency>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-validationartifactId>
- <version>2.7.4version>
- dependency>
User
- package com.jmh.springboot03.model;
-
- import com.jmh.springboot03.annotation.IsUserName;
- import lombok.Data;
-
- import javax.validation.constraints.NotBlank;
-
- /**
- * @author 蒋明辉
- * @data 2022/9/29 17:09
- */
- @Data
- public class User {
- //手机号码
- private String username;
- //密码
- private String password;
- }
JsonResponseStatus 这是个枚举类
- package com.jmh.springboot03.utils;
-
- import lombok.AllArgsConstructor;
- import lombok.Getter;
- import lombok.NoArgsConstructor;
-
- /**
- * @author 蒋明辉
- * @data 2022/9/26 17:36
- */
- @Getter
- @NoArgsConstructor
- @AllArgsConstructor
- public enum JsonResponseStatus {
-
- success(200,"ok"),
- error(500,"内部异常"),
- operation_success(2000,"操作成功"),
- operation_failed(5000,"操作失败"),
- name_empty(20000,"手机号码不能为空"),
- pwd_empty(50000,"密码不能为空"),
- name_pwd_empty(251,"手机号或者密码为空"),
- name_error(20001,"手机号码格式错误")
- ;
-
- //响应代码
- private int code;
- //响应信息
- private String msg;
- }
JsonResponseBody 这是个泛型类
- package com.jmh.springboot03.utils;
-
- import lombok.Data;
-
- /**
- * @author 蒋明辉
- * @data 2022/9/26 17:38
- */
- @Data
- public class JsonResponseBody
{ -
- //响应代码
- private int code;
- //响应信息
- private String msg;
- //响应数据
- private T data;
- //响应总记录数
- private int total=0;
-
- public JsonResponseBody(){
- this.code= JsonResponseStatus.success.getCode();
- this.msg=JsonResponseStatus.success.getMsg();
- }
-
- public JsonResponseBody(JsonResponseStatus jsonResponseStatus){
- this.code=jsonResponseStatus.getCode();
- this.msg=jsonResponseStatus.getMsg();
- }
-
- public JsonResponseBody(T data){
- this.data=data;
- this.code=JsonResponseStatus.success.getCode();
- this.msg=JsonResponseStatus.success.getMsg();
- }
-
- public JsonResponseBody(T data,int total){
- this.data=data;
- this.total=total;
- this.code=JsonResponseStatus.success.getCode();
- this.msg=JsonResponseStatus.success.getMsg();
- }
-
- }
ValidatorUtils 验证手机号码格式的工具类
- package com.jmh.springboot03.utils;
-
- import org.apache.commons.lang3.StringUtils;
-
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
-
- /**
- * 正则校验工具类
- * @author 刘开宇
- */
- public class ValidatorUtils {
-
- private static final Pattern mobile_pattern=Pattern.compile("[1]([0-9])[0-9]{9}$");
-
- public static boolean isMobile(String mobile){
- if(StringUtils.isEmpty(mobile))
- return false;
- Matcher matcher = mobile_pattern.matcher(mobile);
- return matcher.matches();
- }
- }
BusinessException
- package com.jmh.springboot03.exception;
-
- import com.jmh.springboot03.utils.JsonResponseBody;
- import com.jmh.springboot03.utils.JsonResponseStatus;
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.NoArgsConstructor;
-
- /**
- * @author 蒋明辉
- * @data 2022/9/29 18:24
- */
- @Data
- @AllArgsConstructor
- @NoArgsConstructor
- public class BusinessException extends RuntimeException{
- private JsonResponseStatus jsonResponseStatus;
-
- }
GlobalExceptionHandler
- package com.jmh.springboot03.exception;
-
- import com.jmh.springboot03.utils.JsonResponseBody;
- import com.jmh.springboot03.utils.JsonResponseStatus;
- import org.springframework.validation.BindException;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- import org.springframework.web.bind.annotation.RestControllerAdvice;
-
- /**
- * @author 蒋明辉
- * @data 2022/9/29 18:26
- */
- @RestControllerAdvice
- public class GlobalExceptionHandler {
-
- @ExceptionHandler
- public JsonResponseBody> exceptionHandler(Exception e){
- //e.printStackTrace();//打印异常信息
- //定义一个jsonResponseBody
- JsonResponseBody> jsonResponseBody=null;
- if(e instanceof BusinessException) {//是否是BusinessException异常
- //强转为BusinessException
- BusinessException businessException = (BusinessException) e;
- //实例化jsonResponseBody
- jsonResponseBody = new JsonResponseBody<>(businessException.getJsonResponseStatus());
- }else {
- jsonResponseBody=new JsonResponseBody<>(JsonResponseStatus.error);
- }
- return jsonResponseBody;
- }
-
- }
LoginController
- package com.jmh.springboot03.controller;
-
- import com.jmh.springboot03.exception.BusinessException;
- import com.jmh.springboot03.model.User;
- import com.jmh.springboot03.utils.JsonResponseBody;
- import com.jmh.springboot03.utils.JsonResponseStatus;
- import com.jmh.springboot03.utils.ValidatorUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.stereotype.Controller;
- import org.springframework.validation.annotation.Validated;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- /**
- * @author 蒋明辉
- * @data 2022/9/29 17:06
- */
- @RestController
- @RequestMapping("/user")
- public class LoginController {
-
- @RequestMapping("/toLogin")
- public JsonResponseBody> toLogin(User user){
- //1.判断手机号或者密码不能为空
- if(StringUtils.isEmpty(user.getUsername())||StringUtils.isEmpty(user.getPassword())){
- //抛给全局异常处理
- throw new BusinessException(JsonResponseStatus.name_pwd_empty);
- }
- //2.判断手机格式
- if(!ValidatorUtils.isMobile(user.getUsername())){
- //抛给全局异常处理
- throw new BusinessException(JsonResponseStatus.name_error);
- }
- return new JsonResponseBody<>();
- }
-
- }
-
-
-
-
-
-
-
-
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-freemarkerartifactId>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-jdbcartifactId>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
- <dependency>
- <groupId>org.mybatis.spring.bootgroupId>
- <artifactId>mybatis-spring-boot-starterartifactId>
- <version>2.2.2version>
- dependency>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <scope>runtimescope>
- <version>5.1.44version>
- dependency>
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <optional>trueoptional>
- dependency>
-
- <dependency>
- <groupId>org.apache.commonsgroupId>
- <artifactId>commons-lang3artifactId>
- <version>3.12.0version>
- dependency>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-validationartifactId>
- <version>2.7.4version>
- dependency>
JsonResponseStastus 这是一个枚举类
- package com.jmh.springboot03.utils;
-
- import lombok.AllArgsConstructor;
- import lombok.Getter;
- import lombok.NoArgsConstructor;
-
- /**
- * @author 蒋明辉
- * @data 2022/9/26 17:36
- */
- @Getter
- @NoArgsConstructor
- @AllArgsConstructor
- public enum JsonResponseStatus {
-
- success(200,"ok"),
- error(500,"内部异常"),
- operation_success(2000,"操作成功"),
- operation_failed(5000,"操作失败"),
- name_empty(20000,"手机号码不能为空"),
- pwd_empty(50000,"密码不能为空"),
- name_pwd_empty(251,"手机号或者密码为空"),
- name_error(20001,"手机号码格式错误")
- ;
-
- //响应代码
- private int code;
- //响应信息
- private String msg;
- }
JsonResponseBody 这是一个泛型类
- package com.jmh.springboot03.utils;
-
- import lombok.Data;
-
- /**
- * @author 蒋明辉
- * @data 2022/9/26 17:38
- */
- @Data
- public class JsonResponseBody
{ -
- //响应代码
- private int code;
- //响应信息
- private String msg;
- //响应数据
- private T data;
- //响应总记录数
- private int total=0;
-
- public JsonResponseBody(){
- this.code= JsonResponseStatus.success.getCode();
- this.msg=JsonResponseStatus.success.getMsg();
- }
-
- public JsonResponseBody(JsonResponseStatus jsonResponseStatus){
- this.code=jsonResponseStatus.getCode();
- this.msg=jsonResponseStatus.getMsg();
- }
-
- public JsonResponseBody(T data){
- this.data=data;
- this.code=JsonResponseStatus.success.getCode();
- this.msg=JsonResponseStatus.success.getMsg();
- }
-
- public JsonResponseBody(T data,int total){
- this.data=data;
- this.total=total;
- this.code=JsonResponseStatus.success.getCode();
- this.msg=JsonResponseStatus.success.getMsg();
- }
-
- }
ValidatorUtils 这是一个效验手机号码格式的工具类
- package com.jmh.springboot03.utils;
-
- import org.apache.commons.lang3.StringUtils;
-
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
-
- /**
- * 正则校验工具类
- * @author 刘开宇
- */
- public class ValidatorUtils {
-
- private static final Pattern mobile_pattern=Pattern.compile("[1]([0-9])[0-9]{9}$");
-
- public static boolean isMobile(String mobile){
- if(StringUtils.isEmpty(mobile))
- return false;
- Matcher matcher = mobile_pattern.matcher(mobile);
- return matcher.matches();
- }
- }
IsUserName 这是一个注解类
- package com.jmh.springboot03.annotation;
-
- import com.jmh.springboot03.validation.UserNameValidation;
-
- import javax.validation.Constraint;
- import javax.validation.Payload;
- import java.lang.annotation.*;
-
- /**
- * @author 蒋明辉
- * @data 2022/9/29 19:02
- */
- @Documented
- @Constraint(
- validatedBy = {UserNameValidation.class}
- )
- @Target({ElementType.FIELD})
- @Retention(RetentionPolicy.RUNTIME)
- public @interface IsUserName {
- boolean require() default true;
-
- String message() default "手机号码格式错误";
-
- Class>[] groups() default {};
-
- Class extends Payload>[] payload() default {};
- }
UserNameValidation
- package com.jmh.springboot03.validation;
-
- import com.jmh.springboot03.annotation.IsUserName;
- import com.jmh.springboot03.utils.ValidatorUtils;
- import org.springframework.validation.annotation.Validated;
-
- import javax.validation.ConstraintValidator;
- import javax.validation.ConstraintValidatorContext;
-
- /**
- * @author 蒋明辉
- * @data 2022/9/29 19:19
- */
- public class UserNameValidation implements ConstraintValidator
{ -
- private boolean required=true;
-
- @Override
- public void initialize(IsUserName constraintAnnotation) {
- //将IsUserName注解的值赋值给required
- this.required=constraintAnnotation.require();
-
- }
-
- @Override
- public boolean isValid(String username, ConstraintValidatorContext constraintValidatorContext) {
- //如果required是等于false的就代码不需要验证就进行下一步操作
- if (!required){//取反
- return true;//true就继续验证下一步 false代码不继续下面操作
- }
- return ValidatorUtils.isMobile(username);
- }
- }
User
- package com.jmh.springboot03.model;
-
- import com.jmh.springboot03.annotation.IsUserName;
- import lombok.Data;
-
- import javax.validation.constraints.NotBlank;
-
- /**
- * @author 蒋明辉
- * @data 2022/9/29 17:09
- */
- @Data
- public class User {
- @NotBlank(message ="手机号码不能为空")
- @IsUserName(require = true)//这一个注解是自己自定义的注解
- //手机号码
- private String username;
- @NotBlank(message = "密码不能为空")
- //密码
- private String password;
- }
BusinessException
- package com.jmh.springboot03.exception;
-
- import com.jmh.springboot03.utils.JsonResponseBody;
- import com.jmh.springboot03.utils.JsonResponseStatus;
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.NoArgsConstructor;
-
- /**
- * @author 蒋明辉
- * @data 2022/9/29 18:24
- */
- @Data
- @AllArgsConstructor
- @NoArgsConstructor
- public class BusinessException extends RuntimeException{
- private JsonResponseStatus jsonResponseStatus;
-
- }
GlobalExceptionHandler
- package com.jmh.springboot03.exception;
-
- import com.jmh.springboot03.utils.JsonResponseBody;
- import com.jmh.springboot03.utils.JsonResponseStatus;
- import org.springframework.validation.BindException;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- import org.springframework.web.bind.annotation.RestControllerAdvice;
-
- /**
- * @author 蒋明辉
- * @data 2022/9/29 18:26
- */
- @RestControllerAdvice
- public class GlobalExceptionHandler {
-
- @ExceptionHandler
- public JsonResponseBody> exceptionHandler(Exception e){
- //e.printStackTrace();//打印异常信息
- //定义一个jsonResponseBody
- JsonResponseBody> jsonResponseBody=null;
- if(e instanceof BindException){//是否是BindException异常
- //强转为BindException
- BindException bindException=(BindException)e;
- //实例化jsonResponseBody
- jsonResponseBody=new JsonResponseBody<>();
- //获取异常信息
- String me = bindException.getFieldError().getDefaultMessage();
- //将异常信息赋值给jsonResponseBody
- jsonResponseBody.setCode(20020929);
- jsonResponseBody.setMsg(me);
-
- }else {
- jsonResponseBody=new JsonResponseBody<>(JsonResponseStatus.error);
- }
- return jsonResponseBody;
- }
-
- }
LoginController
- package com.jmh.springboot03.controller;
-
- import com.jmh.springboot03.exception.BusinessException;
- import com.jmh.springboot03.model.User;
- import com.jmh.springboot03.utils.JsonResponseBody;
- import com.jmh.springboot03.utils.JsonResponseStatus;
- import com.jmh.springboot03.utils.ValidatorUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.stereotype.Controller;
- import org.springframework.validation.annotation.Validated;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- /**
- * @author 蒋明辉
- * @data 2022/9/29 17:06
- */
- @RestController
- @RequestMapping("/user")
- public class LoginController {
-
- @RequestMapping("/toLogin")
- public JsonResponseBody> toLogin(@Validated User user){
- //不要慌哈! 虽然这里没有代码但是我们已经都交给JSR303 全局异常去做啦
- return new JsonResponseBody<>();
- }
-
- }
-
-
-
-
-
-
-
-
-