首页 > 其他分享 >SpringBootWeb登录认证

SpringBootWeb登录认证

时间:2024-10-08 19:55:17浏览次数:9  
标签:info log 登录 jwt SpringBootWeb 认证 Result error

SpringBootWeb登录认证

基础登录功能

思路

代码实现

测试

前后端联调

登录校验

会话跟踪方案

JWT令牌

生成

校验

登录后下发令牌

代码

测试

过滤器

快速入门

执行流程

拦截路径

过滤器链

登录校验Filter

流程

代码

Interceptor

快速入门

拦截路径

执行流程

登录校验Interceptor

全局异常处理


基础登录功能

思路

代码实现

测试

前后端联调

登录校验

会话跟踪方案

JWT令牌

①登录成功后,生成令牌
②后续每个请求,都要携带JWT令牌,系统在每次请求处理之前,先校验令牌,通过后,再处理

生成

校验

这里输出的是自定义的东西

复制jwt令牌去jwt官网也可以解析

登录后下发令牌

引入JWT令牌操作工具类

登录完成后,调用工具类生成JWT令牌,并返回

代码
    @Autowired
    private EmpService empService;
    @PostMapping("/login")
    public Result login(@RequestBody Emp emp) {
        log.info("login emp: {}", emp);
        Emp e=empService.login(emp);
        if(e!=null){
            Map<String,Object> claims=new HashMap<>();
            claims.put("id",e.getId());
            claims.put("name",e.getName());
            claims.put("username",e.getUsername());
            String jwt = JwtUtils.generateJwt(claims);
            return Result.success(jwt);
        }
        return Result.error("用户名或密码错误");
    }
测试

过滤器

快速入门

执行流程

拦截路径

过滤器链

过滤器执行顺序取决于类名

登录校验Filter

流程

代码
@Slf4j
@WebFilter(urlPatterns = "/*")
public class LoginCheckFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        HttpServletResponse resp = (HttpServletResponse) servletResponse;
        String url = req.getRequestURI().toString();
        log.info("请求url:{}" + url);
        if (url.contains("login")) {
            log.info("登录页面,放行");
            filterChain.doFilter(servletRequest, servletResponse);
            return;
        }
        String jwt = req.getHeader("token");
        if (!StringUtils.hasLength(jwt)) {
            log.info("token为空,返回未登录信息");
            Result error = Result.error("NOT_LOGIN");
            String notLogin = JSONObject.toJSONString(error);
            resp.getWriter().write(notLogin);
            return;
        }
        try {
            JwtUtils.parseJWT(jwt);
        } catch (Exception e) {
            e.printStackTrace();
            log.info("token解析失败,返回未登录信息");
            Result error = Result.error("NOT_LOGIN");
            String notLogin = JSONObject.toJSONString(error);
            resp.getWriter().write(notLogin);
            return;
        }
        log.info("token解析成功,放行");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

Interceptor

快速入门

拦截路径

执行流程

登录校验Interceptor

@Slf4j
@Component
public class LoginCheckInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {
        String url = req.getRequestURI().toString();
        log.info("请求url:{}" + url);
        if (url.contains("login")) {
            log.info("登录页面,放行");
            return true;
        }
        String jwt = req.getHeader("token");
        if (!StringUtils.hasLength(jwt)) {
            log.info("token为空,返回未登录信息");
            Result error = Result.error("NOT_LOGIN");
            String notLogin = JSONObject.toJSONString(error);
            resp.getWriter().write(notLogin);
            return false;
        }
        try {
            JwtUtils.parseJWT(jwt);
        } catch (Exception e) {
            e.printStackTrace();
            log.info("token解析失败,返回未登录信息");
            Result error = Result.error("NOT_LOGIN");
            String notLogin = JSONObject.toJSONString(error);
            resp.getWriter().write(notLogin);
            return false;
        }
        log.info("token解析成功,放行");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle...");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion...");
    }
}

全局异常处理

标签:info,log,登录,jwt,SpringBootWeb,认证,Result,error
From: https://blog.csdn.net/2403_85375987/article/details/142767133

相关文章

  • 订单交易平台五:短信登录验证界面(从0到1的过程)
    1.短信验证界面(版本一)1.1视图函数accont.py中#先定义form类classSmsLoginForm(forms.Form):role=forms.ChoiceField(required=True,label='角色',choices=(('2','客户'),('1','管理员')),w......
  • 深入了解Oracle OCP认证,开启数据库专业之旅
    使用Oracle数据库的公司内部,经常有员工们在讨论OCP认证(OracleCertifiedProfessional,Oracle认证专家),这是甲骨文Oracle公司提供的一种专业认证,认证用于使用者在Oracle技术领域的专业知识和技能。在这里,有一点需要大家知道,虽然OCP认证一般指的是Oracle数据库管理员中级认证,但实......
  • <免费开题>登录网站验证码的生成与识别系统(django)|全套源码+文章lw+毕业设计+课程设计
    <免费开题>登录网站验证码的生成与识别系统(django)|全套源码+文章lw+毕业设计+课程设计+数据库+ppt摘要近年来随着互联网应用技术的飞速发展,为了确保网站系统平台的安全性,各类网站相继推出了验证码应用技术,通过验证码的应用来帮助缓解暴力破解账户密码、垃圾邮件攻击以及在......
  • QQ登录(第三方登录)
    login.html<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="en"><head>......
  • php网站登录密码忘记了的三种解决办法
    如果你忘记了PHP网站的登录密码,可以通过以下三种方法来解决这个问题:1.通过数据库直接修改密码步骤如下:登录数据库:使用命令行工具(如 mysql 或 phpMyAdmin)登录到数据库。例如,通过命令行登录MySQL数据库:mysql-uroot-p选择对应的数据库:选择包含用户表......
  • 权威认证:中国信通院表彰上海斯歌信创成就!
    颁奖现场:左二为上海斯歌业务副总裁陈娅香 2024年9月24日-25日,由中国通信标准化协会主办、中国信息通信研究院(简称“中国信通院”)承办、中国通信企业协会支持的“2024数字化转型发展大会”在北京召开。本届大会以“拥抱数智化无限可能”为主题,大会公布了最新一批IOMM数智化转型......
  • 请问想登录宝塔面板但是忘记密码_宝塔密码忘记了怎么办
    通过邮箱找回:如果你在设置宝塔面板时绑定了邮箱,可以通过绑定的邮箱来找回密码。访问宝塔面板登录页面,找到“忘记密码”选项并点击,按照提示输入已绑定的邮箱地址。登录邮箱查看收到的重置链接或验证码,按照邮件中的指引完成密码重置。通过SSH命令行重置:首先通过SSH客户......
  • 帝国cms网站忘记后台登录认证码、登录安全答案怎么办?
     忘记后台登录认证码解决方案:查看 e/class/config.php 文件中的 $do_loginauth 变量内容。步骤:通过FTP客户端连接到服务器。打开 e/class/config.php 文件。查找 $do_loginauth 变量。查看其内容,即为登录认证码。4.忘记后台登录安全答案解决方案:通过 p......
  • 想登录宝塔面板但是忘记密码_宝塔密码忘记了怎么办
    宝塔面板是一款流行的服务器管理工具,如果你忘记了登录密码,可以按照以下步骤尝试找回或重置密码:通过初始化密码功能重置在宝塔面板登录页面,点击“忘记密码”。根据提示输入面板安装时设定的邮箱或者与之绑定的手机号码。按照收到的验证码完成身份验证后,设置新的登录密码。......
  • 易优网站后台登录密码怎么修改
    要修改易优(Eyou)网站后台的登录密码,通常可以按照以下步骤操作:登录后台:打开浏览器,输入你的网站域名后加上/eyou或根据实际安装路径访问易优CMS后台。使用当前的用户名和密码登录。进入用户管理:登录成功后,在后台管理界面找到“系统设置”或“用户管理”相关的菜单项。选......