Comment Java implémente-t-il le jeton de connexion utilisateur ?
1. Organigramme
2. Token
1. Il s'agit d'une chaîne cryptée avec une sécurité renforcée et prend en charge plusieurs domaines. vérifie que son ID utilisateur et son mot de passe sont légaux via la base de données, puis génère une chaîne de jeton basée sur le nombre aléatoire + ID utilisateur + horodatage actuel, puis cryptée par DES
- Bien sûr, la manière spécifique de générer le jeton est définie par le développeur
- 3 , La génération de jetons utilise généralement uuid pour garantir l'unicité. Lorsque l'utilisateur se connecte, un jeton unique est généré pour l'utilisateur. Le stockage est généralement stocké dans la base de données. stocké deux fois dans le cookie ou la session, en fonction du cookie et du délai d'expiration de la session pour maintenir le délai d'expiration du jeton
- 4. Le jeton est généré côté serveur. Si le frontal utilise le nom d'utilisateur/mot de passe pour demander l'authentification au serveur et que l'authentification côté serveur réussit, le serveur renverra un jeton au front-end. Le front-end peut apporter un jeton à chaque demande pour prouver son statut juridique. 5. Le jeton est un jeton. Sa plus grande caractéristique est le caractère aléatoire et l'imprévisibilité. Les pirates informatiques généraux ou les logiciels ne peuvent pas le deviner
3. Analyse
Dossierpublic 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());
}
}
}
@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); } }
Utilisez l'intercepteur sur l'intercepteur sous LoginInterceptor.javapublic 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....");
}
}
http://localhost:8080/.
http://localhost:8080/user/login?username=admin&password=123456 Souvenez-vous de ce jeton
60227b0e-bdbb-47d9-9df4 -f56163cb529d
Écrivez le jeton dans le facteur
et la sortie est réussie
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.
