前端发送更改密码请求,头部携带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 前后端分离开发 从零到整(四、更改密码操作)的更多相关文章

  1. springboot 前后端分离开发 从零到整(一、环境的搭建)

    第一次写文章,有什么错误地方请大家指正,也请大家见谅. 这次为大家分享我做毕业设计的一个过程,之前没有接触过springboot,一直做的都是Javaweb和前端,做了几个前后端分离的项目.现在听说s ...

  2. springboot 前后端分离开发 从零到整(三、登录以及登录状态的持续)

    今天来写一下怎么登录和维持登录状态. 相信登录验证大家都比较熟悉,在Javaweb中一般保持登录状态都会用session.但如果是前后端分离的话,session的作用就没有那么明显了.对于前后端分离的 ...

  3. springboot 前后端分离开发 从零到整(二、邮箱注册)

    spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver username: root password: 123456 url: ...

  4. Springboot前后端分离开发

    .1.springboot前后端分离开发之前要配置好很多东西,这周会详细补充博客内容和遇到的问题的解析 2,按照下面流程走一遍 此时会加载稍等一下 pom.xml显示中加上阿里云镜像可以加速下载配置文 ...

  5. springboot 前后端分离开发解决跨域访问

    最近新学习了Java EE开发框架springboot,我在使用springboot前后台分离开发的过程中遇到了跨域求问题.在网上寻找答案的过程中发现网上的解决方案大多比较零散,我在这里整理一个解决方 ...

  6. SpringBoot,Vue前后端分离开发首秀

    需求:读取数据库的数据展现到前端页面 技术栈:后端有主要有SpringBoot,lombok,SpringData JPA,Swagger,跨域,前端有Vue和axios 不了解这些技术的可以去入门一 ...

  7. vue+springboot前后端分离实现单点登录跨域问题处理

    最近在做一个后台管理系统,前端是用时下火热的vue.js,后台是基于springboot的.因为后台系统没有登录功能,但是公司要求统一登录,登录认证统一使用.net项目组的认证系统.那就意味着做单点登 ...

  8. 基于SpringBoot前后端分离的点餐系统

    基于SpringBoot前后端分离的点餐系统 开发环境:主要采用Spring boot框架和小程序开发 项目简介:点餐系统,分成卖家端和买家端.买家端使用微信小程序开发,实现扫码点餐.浏览菜单.下单. ...

  9. vue+mockjs 模拟数据,实现前后端分离开发

    在项目中尝试了mockjs,mock数据,实现前后端分离开发. 关于mockjs,官网描述的是 1.前后端分离 2.不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据. 3.数据类型丰 ...

随机推荐

  1. 一个查询ip地址的mysql数据库--ip2nation

    http://ip2nation.com/ip2nation/Sample_Scripts/Country_Based_Redirect 并且已经集成进了laravel:https://github. ...

  2. JavaScript基础进阶之常用字符串方法总结

    前面三篇文章简单的把JavaScript基础内容过了一遍,我们已经可以用JavaScript写一些简单的代码了. 今天主要总结一下JavaScript中String对象中自带的一些方法,来帮助我们处理 ...

  3. 学习python第四天——Oracle查询

    3.子查询(难): 当进行查询的时候,发现需要的数据信息不明确,需要先通过另一个查询得到, 此查询称为子查询: 执行顺序:先执行子查询得到结果以后返回给主查询 组成部分: 1).主查询部分 2).子查 ...

  4. Paxos算法简单陈述

    上文二段式和三段式提交协议是相对比较容易理解的.1990年Leslie Lamport 提出的Paxos算法是一种基于消息传递且具有高度容错特性的一致性算法.但是Paxos算法比较复杂,对于不能沉心学 ...

  5. 2049. [SDOI2008]Cave 洞穴勘测【LCT】

    Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好 ...

  6. 20145203盖泽双 《Java程序设计》第9周学习总结

    20145203盖泽双 <Java程序设计>第9周学习总结 教材学习内容总结 1.撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找. 2.JDBC目的:让Java程序设 ...

  7. the django travel three[form表单验证]

    一:表单验证: 场景:因为浏览器的js可以被禁用,所以需要做后台的输入合法的验证. A:ajax发请求.需要注意的是ajax POST的数据的key值和form表单的里的字段名字一致,否则得不到验证! ...

  8. 学记笔记 $\times$ 巩固 · 期望泛做$Junior$

    最近泛做了期望的相关题目,大概\(Luogu\)上提供的比较简单的题都做了吧\(233\) 好吧其实是好几天之前做的了,不过因为太颓废一直没有整理-- \(Task1\) 期望的定义 在概率论和统计学 ...

  9. C#反射使用时注意BindingFlags的用法(转载)

    最近刚刚开始用反射做项目,遇到一个小的知识点,记录一下. c#反射查找方法时,默认只能查到public方法.如果想要查找private方法,需要设定BindingFlags.    即: Bindin ...

  10. oracle常用视图v$mystat v$sesstat v$sysstat v$statname v$thread v$ parameter v$session v$process

    这两天看了盖国强老师的<<深入浅出>>,很佩服盖老师钻研的精神.书中常用到一个查询语句,为了获取当前会话的跟踪文件路径,sql如下: SELECT d.VALUE || '/' ...