java用户管理 新增与登录功能及拦截器和session的使用

Posted 柴伟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java用户管理 新增与登录功能及拦截器和session的使用相关的知识,希望对你有一定的参考价值。

用户新增的时候需要注意以下几点内容

1.用户名是否唯一
2.密码强度的校验
3.密码要做MD5加密处理
4.使用拦截器防止未登录就操作账户信息

静态资源(我这边用的稍微多点,你们自取就好)

public static final String DEFAULT_PAGE_NUM = "1";
public static final String DEFAULT_PAGE_SIZE = "10";
private static final String SESSION_NAME = "_session_user";
private static final String URL = "/v1/user/login";
private RespMsgUtil respMsgUtil = new RespMsgUtil();
private final IUserService userService;
private final PageUtil<User> pageUtil;
private final Md5Util md5Util;
public static final String REGEX = "^(?![a-zA-z]+$)(?!d+$)(?![!@#$%^&*]+$)[a-zA-Zd!@#$%^&*]{8,20}$";
@Autowired
public UserController(IUserService userService, PageUtil<User> pageUtil, Md5Util md5Util) {
    this.userService = userService;
    this.pageUtil = pageUtil;
    this.md5Util = md5Util;
}

介绍一下校验用户名是否唯一、注册时用户名不能为空及密码强度检验的问题

public String save(UserRequest request) {
    // 检验用户名不能为空,密码强度不能过低
 if (StrUtil.isEmpty(request.getUsername())) {
        return respMsgUtil.getResposnMes(400, "", "用户名不能为空", false);
    }
    if (!request.getPassword().matches(REGEX)) {
        return respMsgUtil.getResposnMes(400, "", "密码强度过低或超出范围,请重新设置密码", false);
    }
    // md5加密
 request.setPassword(md5Util.getMd5(request.getPassword()));
    // 检验用户名是否唯一
 User user1 = new User();
    user1.setUserName(request.getUsername());
    List<User> list = userService.queryAll(user1);
    if (list.size() > 0) {
        return respMsgUtil.getResposnMes(400, "", "用户名已存在", false);
    }
    PageUtil<UserRequest> pageUtil = new PageUtil<>();
    String result;
    try {
        User user = User.builder()
                .userName(request.getUsername())
                .passWord(request.getPassword())
                .gmtCreated(new Date())
                .gmtModified(new Date())
                .build();
        User insert = userService.insert(user);
        if (Objects.nonNull(insert)) {
            result = respMsgUtil.getResposnMes(200, insert, "新增成功", true);
        } else {
            result = respMsgUtil.getResposnMes(400, "", "新增失败", false);
        }
    } catch (Exception e) {
        log.info("新增用户失败", e);
        result = respMsgUtil.getResposnMes(500, "", "新增失敗", false);
    }
    return result;
}

拦截器的使用

首先新建一个拦截器的类

public class UserHandlerInterceptor implements HandlerInterceptor {
    //静态资源
    private static final String SESSION_NAME = "_session_user";
    private static final String URL = "/v1/user/login";
    @Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
        // 验证session是否存在
 User session = (User)request.getSession().getAttribute(SESSION_NAME);
        UserThreadLocal.set(session);
        if (Objects.isNull(session)) {
            response.sendRedirect(URL);
            return false;
        }
        return true;
    }
    @Override
 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) throws Exception {
    }
    @Override
 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
    }
}

接着建一个拦截器的配置类(千完不要忘了@Configuration注解)

@Configuration
public class InterceptorConfiguration implements WebMvcConfigurer {
    /**
 * 将拦截器配置到SpringBoot中
 * @param registry
 */
 @Override
 public void addInterceptors(InterceptorRegistry registry){
 //.addPathPatterns("/user/*")表示拦截的路径,
 //.excludePathPatterns("/user/login");表示的是拦截路径内排除的路径
        registry.addInterceptor(new UserHandlerInterceptor()).addPathPatterns("/user/*").excludePathPatterns("/user/login");
    }
}

注册完成开始登录

用户通过注册时返回的账户密码进行登录
登录成功后,通过session获取用户信息储存在客户端,当登录用户发起其他操作请求的时候session会去查找储存对应的V,取值成功则说明用户已经登录过,可以继续操作。若取值失败则用户未登录。未登录就返回到登录界面让用户登录信息后方可访问
若输入的账户不存在或账户所对应的密码错误则提示用户,用户名或密码错误

public String login(UserRequest request, HttpSession session) {
    try {
        if (StringUtils.isEmpty(request.getUsername())) {
            return respMsgUtil.getResposnMes(404, "", "用户名不能为空", false);
        }
        User user = new User();
        user.setUserName(request.getUsername());
        List<User> list = userService.queryAll(user);
        if (list.size() != 1 || !list.get(0).getPassWord().equals(md5Util.getMd5(request.getPassword()))) {
            return new RespMsgUtil().getResposnMes(404, "", "用户名或密码错误", false);
        }
        User user1 = list.get(0);
        user1.setPassWord("");
        session.setAttribute(SESSION_NAME, user1);
        return new RespMsgUtil().getResposnMes(200, "", "登录成功", true);
    } catch (Exception e) {
        log.info("登录异常", e);
        return new RespMsgUtil().getResposnMes(500, "", "登录失败", false);
    }
}

好了,今天就介绍怎么多。所有的调用方法在Service里。可以用idea的easycode插件生成。下篇文章介绍如何使用easycode插件生成代码。

以上是关于java用户管理 新增与登录功能及拦截器和session的使用的主要内容,如果未能解决你的问题,请参考以下文章

瑞吉外卖项目详细分析笔记及所有功能补充代码

基于java ssm springboot女士电商平台系统源码+文档设计

java ssm springboot网上蛋糕商城项目12(《精品毕设》完整源码+sql+论文)主要功能:登录注册商品浏览分类模糊查找轮播图热销商品购物车订单订单流程控制用户管理

java ssm springboot女士电商平台10(源码+sql+论文可运行《精品毕设》)登录注册商品浏览分类管理模糊查找轮播图热销商品购物车订单订单流程控制用户管理

基于jsp+java+ssm的社会保险信息管理系统

《精品毕设》java ssm springboot二手物品商城项目(完整源码+sql+论文)主要功能:登录注册商品浏览分类模糊查找轮播图热销商品购物车订单订单流程控制用户管理