作者 朱兆平

增加前端提交的password MD5加密处理注解,同时返回的userlist 取消返回用户的password

... ... @@ -14,9 +14,12 @@
* 自定义权限角色管理
* url角色权限识别
* menu与权限关联
* 参数校验
* 已集成mybatis、mybatisGenerator、pageHelper
* 集成定时任务框架
* 目前在IMF框架中使用,打开IMF_Task里面的定时任务注释就可以启动IMF客户端功能
* 集成Spring Cloud
* 集成websocket
* 将会集成lombok,简化部分代码录入,比如实体类,使用方法见[lombok集成使用说明](https://jingyan.baidu.com/article/0a52e3f4e53ca1bf63ed725c.html)
)
... ...
package com.tianbo.warehouse.annotation;
import com.tianbo.warehouse.model.USERS;
import java.lang.annotation.*;
/**
* 将前端注册、新增、编辑后提交的明文密码MD5加密
* 使用该注解不用再MD5转换了
*
* @author adonis
*
*/
@Target({ElementType.PARAMETER,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface UserPasswordMd5 {
String value() default "password";
}
... ...
package com.tianbo.warehouse.annotation;
import com.tianbo.warehouse.model.USERS;
import org.apache.commons.codec.digest.DigestUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
@Aspect
@Component
public class UserPasswordMd5AOP {
@Pointcut("@annotation(com.tianbo.warehouse.annotation.UserPasswordMd5)")
public void annotationPointCut(){
}
@Before("annotationPointCut()")
public void before(JoinPoint joinPoint){
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method= signature.getMethod();
UserPasswordMd5 annotation = method.getAnnotation(UserPasswordMd5.class);
System.out.print("打印:"+annotation.value()+" 开始前");
}
@Around("annotationPointCut()")
public Object advice(ProceedingJoinPoint joinPoint){
System.out.println("通知之开始");
Object[] args = joinPoint.getArgs();
if (args != null && args.length > 0 && args[0].getClass() == USERS.class) {
USERS user = (USERS)args[0];
user.setPassword(DigestUtils.md5Hex(user.getPassword()));
args[0] = user;
}
Object retmsg=null;
try {
retmsg=joinPoint.proceed(args);
System.err.println("++++++++"+retmsg);
} catch (Throwable e) {
e.printStackTrace();
}
System.out.println("通知之结束");
return retmsg;
}
@After("annotationPointCut()")
public void after(){
System.out.println("after方法执行后");
}
}
... ...
package com.tianbo.warehouse.controller;
import com.github.pagehelper.PageInfo;
import com.tianbo.warehouse.annotation.UserPasswordMd5;
import com.tianbo.warehouse.controller.response.ResultJson;
import com.tianbo.warehouse.model.USERS;
import com.tianbo.warehouse.service.UserService;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ocsp.ResponseData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import javax.validation.Valid;
@RestController
public class UserController {
... ... @@ -37,8 +36,9 @@ public class UserController {
return "欢迎回来:"+userDetails.getUsername();
}
@UserPasswordMd5
@PutMapping("/user/edit")
public ResultJson updateUserById(@RequestBody USERS user){
public ResultJson updateUserById(@RequestBody @Valid USERS user){
int i = userService.updateByPrimaryKeySelective(user);
ResultJson resultJson = new ResultJson();
if (1==i){
... ... @@ -49,8 +49,14 @@ public class UserController {
return resultJson;
}
@UserPasswordMd5
@PostMapping("/user/add")
public ResultJson addUser(@RequestBody USERS user,HttpServletRequest request,HttpServletResponse response){
public ResultJson addUser(@RequestBody @Valid USERS user, HttpServletRequest request, HttpServletResponse response, BindingResult bindingResult){
if (bindingResult.hasErrors()){
String s = bindingResult.toString();
}
int i = userService.insertSelective(user);
ResultJson resultJson = new ResultJson();
if (1==i){
... ...
package com.tianbo.warehouse.model;
import com.tianbo.warehouse.validate.CheckUserExist;
import org.hibernate.validator.constraints.Length;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import javax.validation.constraints.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
... ... @@ -13,10 +16,17 @@ public class USERS implements UserDetails {
private static final long serialVersionUID = 1L;
@DecimalMin("1")
private Integer userId;
@NotBlank(message="用户名不能为空")
@Length(min = 5, max = 11, message = "username 长度必须在 {min} - {max} 之间")
@CheckUserExist(message = "用户已存在")
private String username;
@NotNull
@NotBlank(message="密码不能为空")
@Length(min = 6, max = 22, message = "密码 长度必须在 {min} - {max} 之间")
private String password;
private Date birthday;
... ... @@ -27,6 +37,7 @@ public class USERS implements UserDetails {
private Boolean state;
@Length(min = 11, max = 11, message = "mobilephone 长度必须为11位")
private String mobilephone;
private Date creattime;
... ... @@ -36,7 +47,7 @@ public class USERS implements UserDetails {
private String userface;
private String realname;
@Pattern(regexp="[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\\.[a-za-z]{2,4}", message="邮件格式错误")
private String email;
private Integer age;
... ...
package com.tianbo.warehouse.validate;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Target({ElementType.METHOD,ElementType.FIELD,ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CheckUserExistValidator.class )
@Documented
/**
* 检查用户重复注解
* @author mrz
*
*/
public @interface CheckUserExist {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
... ...
package com.tianbo.warehouse.validate;
import com.tianbo.warehouse.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class CheckUserExistValidator implements ConstraintValidator<CheckUserExist,String> {
private CheckUserExist checkUserExist;
@Autowired
UserService userService;
@Override
public void initialize(CheckUserExist checkUserExist) {
this.checkUserExist = checkUserExist;
}
@Override
public boolean isValid(String username, ConstraintValidatorContext var2){
if (username == null){
return true;
}
//根据用户名查询出来有数据,则返回失败存在用户
if (userService.loadByUsername(username)!=null){
return false;
}else {
return true;
}
}
}
... ...
... ... @@ -18,7 +18,7 @@
<result column="age" property="age" jdbcType="INTEGER" />
</resultMap>
<sql id="Base_Column_List" >
user_id, username, password, birthday, sex, address, state, mobilePhone, creatTime,
user_id, username, birthday, sex, address, state, mobilePhone, creatTime,
updateTime, userFace, realName, email, age
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
... ...