1. Carta Aliran
2. Token
1. Token ialah mekanisme pengesahan pelanggan, yang merupakan rentetan yang disulitkan -domain
2. Apabila pengguna log masuk buat kali pertama, pelayan mengesahkan bahawa UserId dan Kata Laluan adalah sah melalui pangkalan data, dan kemudian menjana rentetan token berdasarkan nombor rawak + userid + cap waktu semasa dan penyulitan DES.
Sudah tentu, cara khusus untuk menjana token ditakrifkan oleh pembangun
3 memastikan keunikan. Apabila pengguna Token unik dijana untuknya semasa log masuk, dan storan biasanya disimpan dalam pangkalan data
Masa tamat tempoh token adalah untuk menyimpan token dua kali dalam kuki atau sesi, dan tentukannya berdasarkan masa tamat tempoh kuki dan sesi masa tamat tempoh penyelenggaraan
4. Token dijana pada bahagian pelayan. Jika bahagian hadapan menggunakan nama pengguna/kata laluan untuk meminta pengesahan daripada pelayan, dan pengesahan bahagian pelayan berjaya, pelayan akan mengembalikan Token ke bahagian hadapan. Bahagian hadapan boleh membawa Token dengan setiap permintaan untuk membuktikan status sahnya
5. Token ialah token, dan ciri terbesarnya ialah rawak dan tidak dapat diramalkan. Penggodam atau perisian umum tidak dapat menekanya
3 Analisis
Buat token token, berikan nilai token unik kepada pengguna semasa log masuk dan tetapkan nilai token ini apabila log masuk Brand.
Buat folder Util dalam projek SpringBoot
Buat fail TokenUtil.java dalam folder
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; } /** * 验证token是否合法 * @param token * @return */ public static boolean verify(String token){ return tokenMap.containsKey(token); } public static User gentUser(String token){ return tokenMap.get(token); } public static void main(String[] args) { for (int i = 0; i < 20; i++){ System.out.println(UUID.randomUUID().toString()); } } }
Log masuk pengguna Dapatkan UserController.java
@Api( tags = {"用户模块接口"}) @RestController @RequestMapping("user") public class UserController { @Autowired private UserService userService; @Autowired private HttpSession session; @ApiOperation("登录接口") @RequestMapping(value = "login",method ={RequestMethod.POST,RequestMethod.GET}) public Map<String,Object> login(User user){ Map<String,Object> map = new HashMap<>(); map.put("code",0); if(StringUtils.isEmpty(user.getUsername()) || StringUtils.isEmpty(user.getPassword()) ){ map.put("msg","用户或者密码为空!"); return map; } QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("username",user.getUsername()) .eq("password",user.getPassword()); User userDb = userService.getOne(queryWrapper); if(userDb != null){ String token= TokenUtil.generateToken(userDb); map.put("code",1); map.put("data",userDb); map.put("token",token); session.setAttribute("username",userDb.getUsername()); }else{ map.put("msg","用户名或密码错误!"); } return map; } @ApiImplicitParams( { @ApiImplicitParam(name = "id", value = "用户id", required = true, dataType = "Long"), @ApiImplicitParam(name = "name", value = "测试名字", dataType = "string") } ) @ApiOperation("根据id查询用户信息") @RequestMapping(value="getById",method ={RequestMethod.POST,RequestMethod.GET}) public User getById(Long id ,String name){ System.out.println(name); return userService.getById(id); } }
dan kendalikan pemintas pada pemintas LoginInterceptor.java
public class LoginInterceptor implements HandlerInterceptor { @Autowired private HttpSession httpSession; //Controller逻辑执行之前 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle...."); String uri = request.getRequestURI(); System.out.println("当前路径:"+uri); /** * HandlerMethod=>Controller中标注@RequestMapping的方法 * 需要配置静态资源不拦截时,添加这块逻辑 => 前后端分离项目 * */ // 是我们的conrtoller中的方法 if (!(handler instanceof HandlerMethod)) { return true; } String token = request.getHeader("qcby-token"); if (!TokenUtil.verify(token)) { // 未登录跳转到登录界面 throw new RuntimeException("no login!"); } else { return true; } } //Controller逻辑执行完毕但是视图解析器还未进行解析之前 @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { System.out.println("postHandle...."); } //Controller逻辑和视图解析器执行完毕 @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { System.out.println("afterCompletion...."); } }
4. Menjalankan hasil
http://localhost:8080/.
http://localhost:8080/user/login?username=admin&password=123456
Ingat Token ini
60227b0e-bdbb-47d9-9df4-f56163cb529d
Tulis arahan dalam posmen
Atas ialah kandungan terperinci Bagaimanakah Java melaksanakan token log masuk pengguna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)
