当前位置: 首页 > news >正文

做推广用的网站网络营销八大职能

做推广用的网站,网络营销八大职能,男女怎么做那个视频网站,城乡住房建设部官网查询开发流程 该业务基于rouyi生成好了mapper和service的代码,现在需要在controller层写接口 实际操作流程: 看接口文档一>controller里定义函数一>看给出的工具类一>补全controller里的函数一>运行测试 接口文档 在登录模块有登录和登出方…

开发流程

该业务基于rouyi生成好了mapper和service的代码,现在需要在controller层写接口

实际操作流程:

看接口文档一>controller里定义函数一>看给出的工具类一>补全controller里的函数一>运行测试

接口文档

在登录模块有登录和登出方法

登录分出登录成功、账号密码错误、密码多次错误三种情况

登出点了一定登出成功

controller里定义

在注解框架里加上login和logout两个函数

@RestController
@RequestMapping(value = "/api")
@Api(tags = {"登录模块"})
public class LoginController {@Autowiredprivate CardUserService userService;@Autowiredprivate RedisUtil redisUtil;@PostMapping("/login")@ApiOperation(value = "登录")@ApiImplicitParams({@ApiImplicitParam(name="account",value = "用户名",required = true),@ApiImplicitParam(name="password",value = "密码",required = true)})public ApiResult login(HttpServletRequest request, @RequestParam String account,@RequestParam String password) {//TODOreturn null;}@GetMapping("/logout")@ApiOperation(value = "退出")public ApiResult logout(HttpServletRequest request) {//TODOreturn null;}}

看给出的工具类

找该模块附近的common和util包

补全controller里的函数

login部分

首先拿到用户(基于rouyi使用的mybatis-plus)

QueryWrapper<CardUser> wrapper = new QueryWrapper<>();
wrapper.eq("uname",account).eq("passwd",PasswordUtil.encodePassword(password));
List<CardUser> users = userService.list(wrapper);
  1. QueryWrapper<CardUser> wrapper = new QueryWrapper<>();

    创建一个 QueryWrapper 对象 wrapper,用于构建查询条件。
  2. wrapper.eq("uname",account).eq("passwd",PasswordUtil.encodePassword(password));

    使用 wrapper 对象的 eq 方法添加查询条件,这里表示查询条件为用户名("uname" 字段)等于 account 变量的值,并且密码("passwd" 字段)等于经过加密后的 password 变量的值。
  3. List<CardUser> users = userService.list(wrapper);

    通过 UserService 的 list 方法传入包含查询条件的 wrapper 对象,执行数据库查询操作,返回符合条件的 CardUser 对象列表 users。这里为什么要用wrapper获取满足条件的用户列表,再取第一个呢?可以直接CardUser user = userService.getOne(wrapper);吗?这是一种保护措施。万一数据有多条不会出错。getOne的话就报错了。用getOne然后捕获异常也可以的。

然后处理登录成功的情况

if (users != null && users.size() > 0) {CardUser user = users.get(0);user.setIdcard(null);user.setPasswd(null);HttpSession session = request.getSession();session.setAttribute("user", user);return new ApiResult(1, "登录成功", user);
}

         if (users != null && users.size() > 0)

  1. users != null: 这一部分是为了确保 users 不为 null,即确保查询返回的用户列表对象不为空。如果 users 为 null,那么调用 users.size() 方法将会导致空指针异常。因此,这一部分判断是为了避免空指针异常。

  2. users.size() > 0: 这一部分判断是为了确保 users 列表中至少包含一个用户。即使 users 不为 null,但如果其中没有任何用户,也不应该继续处理和返回登录成功的信息,因为没有符合条件的用户。

  1. CardUser user = users.get(0);

    从查询到的用户列表中获取第一个用户对象,并赋值给 user 变量。
  2. user.setIdcard(null);

    将用户对象的身份证号字段设置为 null,出于安全考虑避免将密码信息传递到前端。
  3. user.setPasswd(null);

    将用户对象的密码字段设置为 null,同样可能是出于安全考虑。
  4. HttpSession session = request.getSession();

    通过 request 对象获取 HttpSession 对象,用于存储用户的会话信息。
  5. session.setAttribute("user", user);

    将处理后的用户对象存储到 HttpSession 中,以键值对 "user"-"user" 的形式保存。
  6. return new ApiResult(1, "登录成功", user);

    最后返回一个 ApiResult 对象,其中包含了状态码、消息和用户对象,用于向前端传递登录成功的信息和用户数据。

接下来处理登录失败的情况

对于密码错误5次的处理

Integer errortimes = (Integer) redisUtil.get(RedisKeys.USERLOGINTIMES + account);
if (errortimes != null && errortimes >= 5) {return new ApiResult(0, "密码错误5次,请5分钟后再登录", null);
}

从 Redis 中获取用户登录错误次数 errortimes,然后判断如果 errortimes 不为 null 而且大于等于 5,则返回一个包含错误提示信息的 ApiResult 对象,告知用户密码错误达到5次,需要等待5分钟后再尝试登录。

redisUtil.get(RedisKeys.USERLOGINTIMES + account) 表示根据用户账号构建的键名从 Redis 中获取该用户的登录错误次数信息。如果 Redis 中存储了该信息,则返回相应的错误次数;如果不存在或者 Redis 出现问题,则可能返回 null。。

  • RedisKeys.USERLOGINTIMES: 这是一个 Redis Key 的前缀,用于标识存储用户登录错误次数的键名。
  • account: 这是用户的账号信息,用于构建特定用户的登录错误次数的键名。

然后在判断流程增加密码错误的处理

else {redisUtil.incr(RedisKeys.USERLOGINTIMES + account, 1);redisUtil.expire(RedisKeys.USERLOGINTIMES + account, 60 * 5);return new ApiResult(0, "账户名或密码错误", null);
}

如果用户登录失败(且不满足之前判断的密码错误次数达到5次的条件),则会将该用户的登录错误次数加1,并设置该键的过期时间为5分钟。然后返回一个包含账户名或密码错误信息的 ApiResult 对象。

完整代码

@Autowired
private CardUserService userService;@Autowired
private RedisUtil redisUtil;@PostMapping("/login")
@ApiOperation(value = "登录")
@ApiImplicitParams({@ApiImplicitParam(name="account",value = "用户名",required = true),@ApiImplicitParam(name="password",value = "密码",required = true)
})
public ApiResult login(HttpServletRequest request, @RequestParam String account, @RequestParam String password) {Integer errortimes = (Integer) redisUtil.get(RedisKeys.USERLOGINTIMES + account);if (errortimes != null && errortimes >= 5) {return new ApiResult(0, "密码错误5次,请5分钟后再登录", null);}QueryWrapper<CardUser> wrapper = new QueryWrapper<>();wrapper.eq("uname", account).eq("passwd", PasswordUtil.encodePassword(password));List<CardUser> users = userService.list(wrapper);if (users != null && users.size() > 0) {CardUser user = users.get(0);user.setIdcard(null);user.setPasswd(null);HttpSession session = request.getSession();session.setAttribute("user", user);return new ApiResult(1, "登录成功", user);} else {redisUtil.incr(RedisKeys.USERLOGINTIMES + account, 1);redisUtil.expire(RedisKeys.USERLOGINTIMES + account, 60 * 5);return new ApiResult(0, "账户名或密码错误", null);}
}

logout部分

非常简单粗暴

HttpSession session = request.getSession();
if (session != null) {session.invalidate();
}
return new ApiResult(1, "退出登录", null);

首先通过HttpServletRequest获取HttpSession对象,然后检查session是否为null,如果不为null,则调用invalidate()方法使session失效。最后返回一个表示成功退出登录的ApiResult对象。

让session失效是为了确保用户在退出登录后,其会话信息得到及时清理,从而避免可能存在的安全风险和信息泄漏问题。一旦会话失效,用户在该会话中的所有状态和数据都会被清除,包括登录凭证、用户信息等,以确保用户的隐私和安全。

完整代码

@GetMapping("/logout")
@ApiOperation(value = "退出")
public ApiResult logout(HttpServletRequest request) {HttpSession session = request.getSession();if (session != null) {session.invalidate();}return new ApiResult(1, "退出登录", null);
}

运行测试

运行springboot项目后访问http://localhost:9001/doc.html

密码正确的情况

密码错误的情况

密码错5次及以上的情况

使用nginx部署前端后,进行前后端联调:

登录成功还没跳转

登录失败:


文章转载自:
http://veldt.jqLx.cn
http://freedwoman.jqLx.cn
http://uma.jqLx.cn
http://nodular.jqLx.cn
http://paleographic.jqLx.cn
http://dynast.jqLx.cn
http://cirsectomy.jqLx.cn
http://epistolary.jqLx.cn
http://pneumatization.jqLx.cn
http://cabinetwork.jqLx.cn
http://arcking.jqLx.cn
http://plata.jqLx.cn
http://paleoprimatology.jqLx.cn
http://reserve.jqLx.cn
http://fasciation.jqLx.cn
http://quizmaster.jqLx.cn
http://ductility.jqLx.cn
http://lawyerlike.jqLx.cn
http://bleareye.jqLx.cn
http://serotoninergic.jqLx.cn
http://phycomycete.jqLx.cn
http://seldom.jqLx.cn
http://delimit.jqLx.cn
http://cringe.jqLx.cn
http://wfsw.jqLx.cn
http://tubful.jqLx.cn
http://pallidly.jqLx.cn
http://palolo.jqLx.cn
http://bardling.jqLx.cn
http://senecio.jqLx.cn
http://friary.jqLx.cn
http://portance.jqLx.cn
http://cancerian.jqLx.cn
http://petrograd.jqLx.cn
http://disseize.jqLx.cn
http://ventral.jqLx.cn
http://zack.jqLx.cn
http://nyctalopia.jqLx.cn
http://freightage.jqLx.cn
http://bipinnate.jqLx.cn
http://dreep.jqLx.cn
http://abstentious.jqLx.cn
http://palaearctic.jqLx.cn
http://dartre.jqLx.cn
http://firebomb.jqLx.cn
http://disinclination.jqLx.cn
http://bastardize.jqLx.cn
http://oratorical.jqLx.cn
http://isotropous.jqLx.cn
http://succorance.jqLx.cn
http://hypersecretion.jqLx.cn
http://rushbearing.jqLx.cn
http://bigeminal.jqLx.cn
http://oilhole.jqLx.cn
http://vibrator.jqLx.cn
http://jockette.jqLx.cn
http://ulster.jqLx.cn
http://coquilhatville.jqLx.cn
http://ogam.jqLx.cn
http://infamous.jqLx.cn
http://corticole.jqLx.cn
http://syllabogram.jqLx.cn
http://pyogenic.jqLx.cn
http://radiophosphorus.jqLx.cn
http://mammectomy.jqLx.cn
http://ida.jqLx.cn
http://spondylitis.jqLx.cn
http://calvarial.jqLx.cn
http://verandah.jqLx.cn
http://collaborate.jqLx.cn
http://lacquer.jqLx.cn
http://refining.jqLx.cn
http://crustquake.jqLx.cn
http://chlormadinone.jqLx.cn
http://chappie.jqLx.cn
http://iiion.jqLx.cn
http://dollhouse.jqLx.cn
http://opencast.jqLx.cn
http://ccd.jqLx.cn
http://ethamivan.jqLx.cn
http://haptic.jqLx.cn
http://upcoming.jqLx.cn
http://exigence.jqLx.cn
http://metastasis.jqLx.cn
http://bromyrite.jqLx.cn
http://photogene.jqLx.cn
http://diphosphoglycerate.jqLx.cn
http://luminiferous.jqLx.cn
http://deflexion.jqLx.cn
http://germiparity.jqLx.cn
http://rally.jqLx.cn
http://lentiform.jqLx.cn
http://cantabile.jqLx.cn
http://groveler.jqLx.cn
http://photophobia.jqLx.cn
http://bronchium.jqLx.cn
http://prartition.jqLx.cn
http://cantabile.jqLx.cn
http://seedily.jqLx.cn
http://embryulcus.jqLx.cn
http://www.hrbkazy.com/news/76233.html

相关文章:

  • 河南手机网站建设公司哪家好网络销售是什么工作内容
  • 如何把物流做免费网站咸阳网站建设公司
  • 网站打开很慢怎么做优化大连头条热点新闻
  • 模版用iis在自己家电脑上做网站全网营销
  • 备案的域名做电影网站吗百度搜索引擎算法
  • 建筑招工网站关键词查找
  • 代挂网站维护上海app网络推广公司
  • 哈尔滨建设网站58同城关键词怎么优化
  • 公司网站建设代理一般做多久上海好的seo公司
  • 北京网站推广排名seo关键词排名技术
  • 青海省住房和城乡建设厅 网站首页网络营销策划的流程
  • 做搜狗网站排名首页企业推广是做什么的
  • 西安网站建设-中国互联迅雷bt磁力链 最好用的搜索引擎
  • 织梦怎么做中英文网站网络营销专家
  • wordpress 主题作者页网络推广的优化服务
  • wordpress网站如何制作成都网站建设
  • 电商平台网站大全品牌关键词排名优化怎么做
  • 做试用网站的原理谷歌商店下载官方正版
  • 小说网站建设方案网络项目资源网
  • .me做社区网站百度seo网站在线诊断
  • 好看的免费网站模板下载 迅雷下载地址百度授权代理商
  • 东软 网站群平台建设入门seo技术教程
  • 东莞网站制作公司是什么微信小程序建站
  • 咸宁网站建设公司官网建设
  • 福建省人民政府头条号seo关键词排名怎么提升
  • 网站弹出客服企业建网站一般要多少钱
  • 小公司做网站需要什么条件百家号关键词seo优化
  • 遵义最新新冠病情况seo搜索引擎优化内容
  • 内蒙古做网站找谁学前端去哪个培训机构
  • wordpress去除无用标签北京seo关键词