springboot 前后端分离开发 从零到整(四、更改密码操作)
前端发送更改密码请求,头部携带token,服务端拦截器拦截头部token并解析,根据token中的信息来查询用户信息。需要登录才能进行的操作是由自己定的,有些操作可以直接放行。具体实现是:
上一章写到有三个注解,其中passtoken是直接放行,不需要验证即可进行的操作,userloginToken是需要token验证并通过才能进行的操作,CurrentUserConstants将token转化成CurrentUser。
下面就用简单的更改密码过程来运用一下UserLoginToken注解。
具体操作过程:
dao层
/**
* 更改密码
* @param email
* @param newPassword
*/
@Update("update user set password=#{newPassword} where email=#{email}")
public void ChangePassword(String email,String newPassword);
service层
/**
* 根据旧密码更改密码
* @param usedPassword
* @return
*/
public RespEntity ChangePassword(String email,String usedPassword,String newPassword){
user=userDao.login(email,usedPassword);
if(user==null){
respEntity=new RespEntity(RespCode.PASSWORD_FAILED);
}else {
userDao.ChangePassword(email,newPassword);
respEntity=new RespEntity(RespCode.SUCCESS);
}
return respEntity;
}
controller层
/**
* 更改密码
* @param user
* @param map
* @return
*/
@UserLoginToken
@RequestMapping("/changePassword")
public RespEntity OperationPassword(@CurrentUser User user,@RequestBody Map<String,Object> map){
String email=user.getEmail();
String newPassword=(String)map.get("newPassword");
String usedPassword=(String)map.get("usedPassword");
respEntity=userService.ChangePassword(email,usedPassword,newPassword);
return respEntity;
}
在请求之前加入注解@UserLoginToken,声明该请求需要携带token才能进行的操作,@CurrentUser 获取发起请求的用户信息。
前端ajax请求在头部(header)携带token请求:
function changePassword(usedPassword,newPassword){
$.ajax({
async:false,
url:tdoorurl+"changePassword",
type:"POST",
contentType:"application/json",
dataType:"json",
data:JSON.stringify({
newPassword:newPassword,
usedPassword:usedPassword
}),
headers:{
//token保存在客户端的localstorage中,从localstorage中取出
"Authorization":localStorage.getItem("token")
},
success:function(Msg){
if(Msg.code==0){
console.log("修改密码成功");
}else{
console.log("原密码错误");
}
},
error:function(Msg){
}
})
}
相反,如果用户在执行不需要登录就放行的操作,在请求之前加上注解@PassToken。例如之前的登录操作:
@PassToken
@RequestMapping("/login")
public RespEntity testData(@RequestBody Map<String,Object> map){
String email=(String)map.get("email");
String password=(String)map.get("password");
respEntity=userService.Login(email,password);
return respEntity;
}
以上就是三个注解的用法,在后面写的请求中,基本都是以这种形式来判断是否放行用户的操作。
springboot 前后端分离开发 从零到整(四、更改密码操作)的更多相关文章
- springboot 前后端分离开发 从零到整(一、环境的搭建)
第一次写文章,有什么错误地方请大家指正,也请大家见谅. 这次为大家分享我做毕业设计的一个过程,之前没有接触过springboot,一直做的都是Javaweb和前端,做了几个前后端分离的项目.现在听说s ...
- springboot 前后端分离开发 从零到整(三、登录以及登录状态的持续)
今天来写一下怎么登录和维持登录状态. 相信登录验证大家都比较熟悉,在Javaweb中一般保持登录状态都会用session.但如果是前后端分离的话,session的作用就没有那么明显了.对于前后端分离的 ...
- springboot 前后端分离开发 从零到整(二、邮箱注册)
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver username: root password: 123456 url: ...
- Springboot前后端分离开发
.1.springboot前后端分离开发之前要配置好很多东西,这周会详细补充博客内容和遇到的问题的解析 2,按照下面流程走一遍 此时会加载稍等一下 pom.xml显示中加上阿里云镜像可以加速下载配置文 ...
- springboot 前后端分离开发解决跨域访问
最近新学习了Java EE开发框架springboot,我在使用springboot前后台分离开发的过程中遇到了跨域求问题.在网上寻找答案的过程中发现网上的解决方案大多比较零散,我在这里整理一个解决方 ...
- SpringBoot,Vue前后端分离开发首秀
需求:读取数据库的数据展现到前端页面 技术栈:后端有主要有SpringBoot,lombok,SpringData JPA,Swagger,跨域,前端有Vue和axios 不了解这些技术的可以去入门一 ...
- vue+springboot前后端分离实现单点登录跨域问题处理
最近在做一个后台管理系统,前端是用时下火热的vue.js,后台是基于springboot的.因为后台系统没有登录功能,但是公司要求统一登录,登录认证统一使用.net项目组的认证系统.那就意味着做单点登 ...
- 基于SpringBoot前后端分离的点餐系统
基于SpringBoot前后端分离的点餐系统 开发环境:主要采用Spring boot框架和小程序开发 项目简介:点餐系统,分成卖家端和买家端.买家端使用微信小程序开发,实现扫码点餐.浏览菜单.下单. ...
- vue+mockjs 模拟数据,实现前后端分离开发
在项目中尝试了mockjs,mock数据,实现前后端分离开发. 关于mockjs,官网描述的是 1.前后端分离 2.不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据. 3.数据类型丰 ...
随机推荐
- EclEmma安装与使用
安装 EclEmma 插件的过程和大部分 Eclipse 插件相同,我们既可以通过 Eclipse 标准的 Update 机制来远程安装 EclEmma 插件(图 1),也可以从站点(参阅参考资源)下 ...
- Connection:Keep-alive
名词解释: HTTP无状态:无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态.从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系 如果你要实现一个购 ...
- oc消息转发:forwardInvocation、签名、参量个数、SEL 相关测试
结论1.签名的参量类型伪造不正确会导致崩溃. 结论二.签名个数不对可能会导致参量丢失. 结论三:在签名配置正确的情况下,系统会将函数调用的所有信息打包到NSInvocation准备转发: - (voi ...
- Spring-IOC MethodInvokingFactoryBean 类源码解析
MethodInvokingFactoryBean MethodInvokingFactoryBean的作用是,通过定义类和它的方法,然后生成的bean是这个方法的返回值,即可以注入方法返回值. Me ...
- 使用yii的layout,加入<?php echo $content; ?>这句话时,它会自动在子页面上面添加一个div包裹
使用yii的layout,加入<?php echo $content; ?>这句话时,它会自动在子页面上面添加一个div包裹,而且div的id命名为id=content,这个和已有id重复 ...
- virtualbox+vagrant学习-2(command cli)-10-vagrant Port命令
Port 格式: vagrant port [options] [name|id] 端口命令显示映射到主机端口的客户端口的完整列表 userdeMacBook-Pro:~ user$ vagrant ...
- ethers.js-2-wallets and signers
Application Programming Interface (API) Wallets and Signers A Wallet manages a private/public key pa ...
- 接口自动化平台github开源项目Django
https://github.com/githublitao/api_automation_test
- MySQL(三)架构
和其他数据库相比,MySQL有点与众不同,他的架构可以在多种不同场景中应用并发挥好的作用,但同时也会带来一点选择上的困难.MySQL并不完美,却足够灵活,能够适应高要求的环境.为了充分发挥MySQL的 ...
- 【ev】视频软件
EV系列:EV录屏.EV剪辑