java session 管理器_关于java: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 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 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 list = userService.queryAll(user1);

if (list.size() > 0) {

return respMsgUtil.getResposnMes(400, "", "用户名已存在", false);

}

PageUtil 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 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插件生成代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值