首页 > 其他分享 >登陆检验

登陆检验

时间:2023-11-30 17:31:41浏览次数:30  
标签:atguigu springframework 检验 登陆 org import com spzx


登陆检验_java

package com.atguigu.spzx.manager.interceptor;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.atguigu.spzx.model.entity.system.SysUser;
import com.atguigu.spzx.model.vo.common.Result;
import com.atguigu.spzx.model.vo.common.ResultCodeEnum;
import com.atguigu.spzx.utils.AuthContextUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.concurrent.TimeUnit;

@Component
public class LoginAuthInterceptor implements HandlerInterceptor {
    @Autowired
    private RedisTemplate<String, String> redisTemplate;


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //1.获取请求方式
        //请求方式未options 预检请求
        String method = request.getMethod();
        if ("OPTIONS".equals(method)) {
            return true;
        }

        //2.从请求头获取token
        String token = request.getHeader("token");

        //3.如果为空,返回错误信息
        if (StrUtil.isEmpty(token)) {
            responseNoLoginInfo(response);
            return false;
        }

        //4.如果token不为空,拿着token去redis查询
        String userInfo = redisTemplate.opsForValue().get("user:login" + token);

        //5.如果redis查不到信息,返回错误信息
        if (StrUtil.isEmpty(userInfo)) {
            responseNoLoginInfo(response);
            return false;
        }

        //6.如果redis查到信息,把信息存到threadLocal里
        SysUser sysUser = JSON.parseObject(userInfo, SysUser.class);
        AuthContextUtil.set(sysUser);

        //7.把redis用户信息数据过期过期时间
        redisTemplate.expire("user:login" + token, 30, TimeUnit.MINUTES);

        //8.放行
        return true;
    }

    //响应208状态码给前端
    private void responseNoLoginInfo(HttpServletResponse response) {
        Result<Object> result = Result.build(null, ResultCodeEnum.LOGIN_AUTH);
        PrintWriter writer = null;
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=utf-8");
        try {
            writer = response.getWriter();
            writer.print(JSON.toJSONString(result));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (writer != null) writer.close();
        }
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        //删除threadLocal信息
        AuthContextUtil.remove();
    }

}
# 自定义配置
spzx:
auth:
noAuthUrls:
- /admin/system/index/login
- /admin/system/index/generateValidateCode
package com.atguigu.spzx.manager.properties;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.List;

@Data
@ConfigurationProperties(prefix = "spzx.auth")
public class UserProperties {

    private List<String> noAuthUrls;

}
package com.atguigu.spzx.manager.config;

import com.atguigu.spzx.manager.interceptor.LoginAuthInterceptor;
import com.atguigu.spzx.manager.properties.UserProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Component
public class WebMvcConfiguration implements WebMvcConfigurer {
    @Autowired
    private LoginAuthInterceptor loginAuthInterceptor;

    @Autowired
    private UserProperties userProperties;

    //拦截器注册
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginAuthInterceptor)
        //                .excludePathPatterns("/admin/system/index/login" ,
        //                        "/admin/system/index/generateValidateCode")
        .excludePathPatterns(userProperties.getNoAuthUrls())
        .addPathPatterns("/**");
    }

    //跨域问题
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")      // 添加路径规则
        .allowCredentials(true)               // 是否允许在跨域的情况下传递Cookie
        .allowedOriginPatterns("*")           // 允许请求来源的域规则
        .allowedMethods("*")
        .allowedHeaders("*");                // 允许所有的请求头
    }
}
package com.atguigu.spzx.manager;

import com.atguigu.spzx.manager.properties.UserProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages = {"com.atguigu.spzx"})
@EnableConfigurationProperties(value = {UserProperties.class})
public class ManagerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ManagerApplication.class,args);
    }
}

配置拦截器

除了登录和生成验证的的接口不需要验证是否登录,其他都需要

标签:atguigu,springframework,检验,登陆,org,import,com,spzx
From: https://blog.51cto.com/u_16365674/8633232

相关文章

  • 谷歌Gmail停用申诉回来登陆遇到异常活动验证,提示手机号无法用于验证怎么办?
    谷歌Gmail无法登陆出现异常活动验证怎么办?先说注意事项:一、不要使用外面的手机号去验证,100%被谷歌锁定。外面的号码都是被人滥用过去注册的,你还使用去验证自己的异常账号,不被锁定就怪了!二、谷歌的风控规则已经变化了,网上有很多说法认为只需要等待几天、一周甚至一个月就能自动恢复,......
  • Java登陆第十三天——网络编程(三)DatagramSocket
    DatagramSocket使用DatagramSocket(数据套接字)可以进行UDP程序的开发,此类可以建立单向地、不可靠地、快速地通信。在UDP编程中,混淆了服务端和客户端的概念。因为通信是单向的,所以身份可以随时切换。(也有人把TCP称作服务端客户端,UDP称作发送端和接收端)DatagramSocket类常用......
  • Java登陆第十二天——网络编程(一)网络的概念
    网络由两台或者更多的计算机组成的网络,称之为计算机网络。在同一个网络中,不同的计算机可以互相通信。因为他们使用的都是相同的协议。(通信:两台设备之间通过网络实现数据传输。)假设某处的一个计算机网络使用的网络协议为ABC。那么另一处网络协议为EFG的计算机网络,就无法与该A......
  • 和GPT学习假设检验
    假设检验是统计学中的一种方法,用于判断观察到的数据是否支持我们对某个假设的看法。以下是一个实际的生活中的例子:假设你是一家药品公司的研究员,你正在研发一种新的药物,希望它能比现有的药物更有效地治疗某种疾病。你的零假设H0可能是:“新药的效果和旧药一样”,对立假设H1可能是:“新......
  • mysql无法登陆,报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (
    问题描述在使用命令行登录MySQL时出现了下述问题: 出错原因usingpassword:NO:表示输入没有输入密码就尝试登陆了usingpassword:YES:表示输入了密码,但密码错误 解决方案:修改密码1.修改mysql配置文件my.cnf。在 [mysqld]增加skip-grant-tables 无密码进入mys......
  • kvm-虚拟机登陆方式VNC、virsh console
    阅读目录(Content)1、虚拟机多,VNC登陆问题2、多虚拟机,VNC登陆的实战3、使用virsh console登陆实战3.1、需求3.2、虚拟机开启支持console 3.3、登陆测试3.4、退回virshconsole方法回到顶部(gototop)1、虚拟机多,VNC登陆问题当我们虚拟机过多的时候,如果想用vn......
  • Java登陆第十天——JDBC(二)
    ResultSet接口常用方法ResultSet存放的是DQL查询结果的结果集。常用方法如下:方法类型描述booleannext()throwsSQLException普通方法指针移动到下一行(没有下一行返回false)intgetInt(StringcolumnLabel)throwsSQLException普通方法根据列名获取行Str......
  • Java登陆第九天——JDBC
    JDBCJDBC本身是Java提供的一套标准接口,由不同数据库厂商提供接口的具体实现。至此,开发者只需调用JDBC就可以完成对各种数据库的操作。mysql-jdbc-maven坐标<!--Mysql版本:5.7.36--><dependency><groupId>mysql</groupId><artifactId>mys......
  • JS逆向实战26——某店ua模拟登陆
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!目标目标网站aHR0cHM6Ly9kLndlaWRpYW4uY29tL3dlaWRpYW4tcGMvbG9naW4=目标获取登录接口UA参数加密,U......
  • Java登陆第八天——SQL之DCL
    SQL语句SQL概括起来可以分为以下四组。(都是SQL,因为功能的不同,为了更好学习划分了类别)DDL——数据定义语言。用于定义数据的结构。指的是增,删,改数据库DML——数据操作语言。用于检索或修改数据。指的是增,删,改数据DQL——数据查询语言。用于查询各种形式的数据。指的是查询......