JAVAWEB应用模块(一)登录模块
java后台代码(MD5加密+token验证):
import com.smart.ssai.admin.domain.User;
import com.smart.ssai.admin.service.UserService;
import com.smart.ssai.VO.Response;
import com.smart.ssai.common.utils.ResultVOUtil;
import com.smart.ssai.common.utils.ToolUtils;
import com.smart.ssai.constant.TokenConstant;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import java.util.Date;
import java.util.HashMap;
import java.util.Map; @RestController
@RequestMapping("/api")
public class LoginController { @Autowired
private UserService userService; /**
* 用户登录
* @param username 用户名
* @param password 密码
* @return
*/
@PostMapping("/login")
public ResponseEntity<Response> login(@RequestParam(value = "username") String username
, @RequestParam(value = "password") String password){
User user = userService.getUserByUsername(username);
//判断用户是否存在
if(null == user){
return ResultVOUtil.show(0,"用户不存在,请重新输入",null);
}
//判断密码是否正确
String password1 = ToolUtils.md5Hex(password,String.valueOf(user.getCode()));
if(!user.getPassword().equals(password1)){
return ResultVOUtil.show(0,"用户密码错误",null);
}
//登录成功,生成token,并更新数据库token和过期时间
Date date = new Date();
Integer nowTime = (int)(date.getTime()/1000);//当前时间戳
String token = createToken(user,date);//token
User model = new User();
BeanUtils.copyProperties(user,model);
// model.setId(user.getId());
model.setTimeout(nowTime);
model.setToken(token);
userService.insert(model);
//跳转到指定页面,这里不跳转,返回token信息给前端
Map<String,Object> map = new HashMap<>();
map.put("token",token);
return ResultVOUtil.show(1,"登录成功",map);
} /**
* 生成token,根据有效的用户信息
* @param user 用户实例
* @param date 当前日期
* @return
*/
private String createToken(User user, Date date){
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
JwtBuilder builder = Jwts.builder().setHeaderParam("typ", "JWT")//设置header
.setHeaderParam("alg", "HS256").setIssuedAt(date)//设置签发时间
.setExpiration(new Date(date.getTime() + TokenConstant.EXPIRE))//设置过期时间,30天,超出int,要加L
.claim("userid",String.valueOf(user.getId()))//设置内容
.setIssuer(TokenConstant.ISSUER)//设置签发人
.signWith(signatureAlgorithm, TokenConstant.SECRETKEY);//签名,需要算法和key
String jwt = builder.compact();
return jwt;
}
}
JAVAWEB应用模块(一)登录模块的更多相关文章
- DeWeb第1个通用化模块:登录模块,仅需要修改一个配置文件即可实现登录功能
演示: https://delphibbs.com/login.dw 开发环境和源代码 https://gitee.com/xamh/dewebsdk 效果图: 配置方法: 在Runtime目录中放一 ...
- 移动IM开发指南3:如何优化登录模块
<移动IM开发指南>系列文章将会介绍一个IM APP的方方面面,包括技术选型.登陆优化等.此外,本文作者会结合他在网易云信多年iOS IM SDK开发的经验,深度分析实际开发中的各种常见问 ...
- iPad开发--QQ空间布局,登录模块
一.登录模块 登录逻辑 - (IBAction)loginClick:(UIButton *)sender { self.view.userInteractionEnabled = NO; [self ...
- Web应用程序系统的多用户权限控制设计及实现-登录模块【4】
通过前三个模块的介绍,把web权限系统开发所需要的基本类,Css文件,EasyUI框架等准备好后,就可以着手开始系统的编码了. 登陆模块是权限处理系统的关键,根据输入用户的的信息,可自动从数据库中加载 ...
- iOS不得姐项目--登录模块的布局,设置文本框占位文字颜色,自定义内部控件竖直排列的按钮
一.登录模块的布局 将一整部分切割成若干部分来完成,如图分成了三部分来完成 设置顶部状态栏为白色的方法 二.设置文本框占位文字颜色 <1>方法一与方法二实现原理是同一种,都是通过设置pla ...
- 如何设计App登录模块?
1.熟悉目前常见的手机APP登陆方式 ① 账号登陆(手机.邮箱) ② 第三方登陆(微信,QQ,微博) ③ 一键快捷登录(工具类,如不记单词) ④ 游客登陆(bbs) ⑤ demo测试登陆(如友盟等) ...
- IDE开发<LER-Studio>(2)::登录模块
软件中写登录模块是为了防止软件的恶意传播,内测阶段可以忽略登录. 以下为登录模块主要源代码: void CLoginDlg::OnBnClickedBtnLogin() { // TODO: Add ...
- 基于Servlet、JSP、JDBC、MySQL登录模块(包括使用的过滤器和配置)
遇见前文的注冊模块,本篇是登录模块.主要包含登录主界面,和登录相关编写的LoginAction.LoginDao和LoginService.以及配置的Filter.以下按逻辑顺序记录具体过程和代码: ...
- 登录模块的进化史,带大家回顾java学习历程(二)
接着前面的登录模块的进化史,带大家回顾java学习历程(一) 继续往下面讲 前面我们去实现登录功能,都是想着要完成这个功能,直接在处理实际业务的类中去开始写具体的代码一步步实现,也就是面向过程的编程. ...
- Django之Auth模块 实现登录,退出,自带session 与认证功能的一个重要的模块
Auth模板 1. 什么是Auth模块,有什么用? django的auth的模块的使用: auth 是集合注册,登录,注销,session 多个功能集合在一起的模块 2. 使用Auth组件的默认aut ...
随机推荐
- 【DTOJ】1001:长方形周长和面积
DTOJ 1001:长方形周长和面积 解题报告 2017.11.05 第一版 ——由翱翔的逗比w原创 题目信息: 题目描述 已知长方形的长和宽,求长方形的周长和面积? 输入 一行:空格隔开的两个整 ...
- ECharts展示后台数据
/** * Created by Administrator on 2015/11/10 010. */ var home = function () { //项目预警分析 var getProAla ...
- input清空和重置select下拉框
背景 一般页面搜索条件都会有input输入框和select选择框,同时页面上都会有重置reset按钮,这时就需要清空input和重置select 实现 清空input 清空单个input: $(&qu ...
- Mac IDEA 2019.3.1下载及破解,可激活至2089年
背景 目前IDEA已更新到2019.3.3,但是下载这个版本后使用目前网上的常见破解方法会出现各种问题.比如使用注册码方式提示license key is in legacy format,或者使用L ...
- 进程无法连接到 Subscriber"XXXXXXX"
进程无法连接到 Subscriber“APP07”. 在订阅的机器上config 添加别名 APP07
- Wannafly Winter Camp 2020 Day 6D 递增递增 - dp,组合数学
给定两个常为 \(n\) 的序列 \(l_i,r_i\),问夹在它们之间 ( \(\forall i, l_i \leq a_i \leq r_i\) ) 的不降序列的元素总和. Solution 先 ...
- php趣题小记
题目一: $a = 'abc'; $a++; echo $a; // abd 题目二: function myfun($a){ echo $a+10; } $a = 10; echo "my ...
- 使用resultMap实现高级结果映射
使用resultMap实现高级结果映射 resultMap的属性: 1.属性 id:resultMap的唯一标识.type:resulMap的映射结果类型(一般为Java实体类).2.子节点 id:一 ...
- node-express处理表单的接口
写一个小接口,用postman测试接口是否可行
- Error: cannot fetch last explain plan from PLAN_TABLE
最近遇到了错误"Error: cannot fetch last explain plan from PLAN_TABLE",于是稍微研究了一下哪些场景下碰到这种错误,具体参考下面 ...