目录
一、流程图
二、Token
三、分析
四、运行结果

一、流程图

二、Token
1、token是一种客户端认证机制,是一个经过加密的字符串,安全性强,支持跨域

2、用户第一次登录,服务器通过数据库校验其UserId和Password合法,则再根据随机数字+userid+当前时间戳再经过DES加密生成一个token串

⑴当然具体生成token的方式是开发自己定义的

3、token的生成一般是采用uuid保证唯一性,当用户登录时为其生成唯一的token,存储一般保存在数据库中

⑴token过期时间采用把token二次保存在cookie或session里面,根据cookie和session的过期时间去维护token的过期时间

4、Token是在服务端产生的。如果前端使用用户名/密ma向服务端请求认证,服务端认证成功,那么在服务端会返回Token给前端。前端可以在每次请求的时候带上Token证明自己的合法地位

5、Token,就是令牌,最大的特点就是随机性,不可预ce。一般黑客或软件无法猜测出来

三、分析
建立一个token令牌,在用户登录时候给用户一个独特得令牌值,登录时候嘚赋值这个令牌

在SpringBoot项目中建立一个Util文件夹

文件夹下建立TokenUtil.java文件
`public class TokenUtil {
private static Map<String, User> tokenMap = new HashMap<>();
public static String generateToken(User user){
//生成唯一不重复的字符串
String token = UUID.randomUUID().toString();
tokenMap.put(token,user);
return token;
}

  1. /**
  2. * 验证token是否合法
  3. * @param token
  4. * @return
  5. */
  6. public static boolean verify(String token){
  7. return tokenMap.containsKey(token);
  8. }
  9. public static User gentUser(String token){
  10. return tokenMap.get(token);
  11. }
  12. public static void main(String[] args) {
  13. for (int i = 0; i < 20; i++){
  14. System.out.println(UUID.randomUUID().toString());
  15. }
  16. }

}用户登录得UserController.java@Api( tags = {“用户模块接口”})
@RestController
@RequestMapping(“user”)
public class UserController {
@Autowired
private UserService userService;

  1. @Autowired
  2. private HttpSession session;
  3. @ApiOperation("登录接口")
  4. @RequestMapping(value = "login",method ={RequestMethod.POST,RequestMethod.GET})
  5. public Map<String,Object> login(User user){
  6. Map<String,Object> map = new HashMap<>();
  7. map.put("code",0);
  8. if(StringUtils.isEmpty(user.getUsername()) || StringUtils.isEmpty(user.getPassword()) ){
  9. map.put("msg","用户或者密ma为空!");
  10. return map;
  11. }
  12. QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  13. queryWrapper.eq("username",user.getUsername())
  14. .eq("password",user.getPassword());
  15. User userDb = userService.getOne(queryWrapper);
  16. if(userDb != null){
  17. String token= TokenUtil.generateToken(userDb);
  18. map.put("code",1);
  19. map.put("data",userDb);
  20. map.put("token",token);
  21. session.setAttribute("username",userDb.getUsername());
  22. }else{
  23. map.put("msg","用户名或密ma错误!");
  24. }
  25. return map;
  26. }
  27. @ApiImplicitParams(
  28. {
  29. @ApiImplicitParam(name = "id",
  30. value = "用户id", required = true,
  31. dataType = "Long"),
  32. @ApiImplicitParam(name = "name",
  33. value = "测试名字",
  34. dataType = "string")
  35. }
  36. )
  37. @ApiOperation("根据id查询用户信息")
  38. @RequestMapping(value="getById",method ={RequestMethod.POST,RequestMethod.GET})
  39. public User getById(Long id ,String name){
  40. System.out.println(name);
  41. return userService.getById(id);
  42. }

}在拦截器上操作 interceptor下面LoginInterceptor.javapublic class LoginInterceptor implements HandlerInterceptor {

  1. @Autowired
  2. private HttpSession httpSession;
  3. //Controller逻辑执行之前
  4. @Override
  5. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  6. System.out.println("preHandle....");
  7. String uri = request.getRequestURI();
  8. System.out.println("当前路径:"+uri);
  9. /**
  10. * HandlerMethod=>Controller中标注@RequestMapping的方法
  11. * 需要配置静态资源不拦截时,添加这块逻辑 => 前后端分离项目
  12. *
  13. */
  14. // 是我们的conrtoller中的方法
  15. if (!(handler instanceof HandlerMethod)) {
  16. return true;
  17. }
  18. String token = request.getHeader("qcby-token");
  19. if (!TokenUtil.verify(token)) {
  20. // 未登录跳转到登录界面
  21. throw new RuntimeException("no login!");
  22. } else {
  23. return true;
  24. }
  25. }
  26. //Controller逻辑执行完毕但是视图解析器还未进行解析之前
  27. @Override
  28. public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
  29. System.out.println("postHandle....");
  30. }
  31. //Controller逻辑和视图解析器执行完毕
  32. @Override
  33. public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
  34. System.out.println("afterCompletion....");
  35. }

}`
四、运行结果
http://localhost:8080/

http://localhost:8080/user/login?username=admin&password=123456

记住这个令牌

60227b0e-bdbb-47d9-9df4-f56163cb529d

在postman中

写入令牌,输出成功

更多相关文章

  1. Android之生成桌面快捷方式(二)
  2. Android(安卓)apk反编译
  3. Android(安卓)视图绑定,找不到类 'ResultProfileBinding'
  4. Eclipse+PhoneGap生成Android应用。
  5. Android(安卓)增量更新实例(Smart App Updates)
  6. Android(安卓)Studio中使用gradle生成aar包
  7. Android(安卓)studio 真机调试时生成的文件找不到的解决方案
  8. android room自动生成sql语句
  9. Mapbox Android学习笔记(1)简介

随机推荐

  1. Android音量调节AudioManager
  2. Android SDCard操作(文件读写,容量计算)
  3. Android中的Animation使用
  4. android 混淆jar及apk的心得
  5. Android(安卓)Studio 使用Lambda表达式
  6. android source
  7. android 中的 handler
  8. Android Fresco - SimpleDraweeView 圆形
  9. Android字体
  10. Android中ListView的使用