BasicAuth认证实现方式

BasicAuth认证是配合RESTful API 使用的最简单的认证方式,只需提供用户名密码即可。这里介绍python和java在项目中实现BasicAuth的方法。

Basic Auth认证的方式,是客户端在向服务器发请求的时候,会在请求头(header)中提供用户名和密码作为认证信息,它会通过BASE64编码将其进行编码处理,最后在请求头中存在格式为"Authorization":'basic '+b64Val。其中b64Val为经过base64转码后的用户名密码信息,即b64Val=base64.b64encode('username:password')

Python-flask实现

在python中,我们可以使用flask完成BasicAuth认证。首先只需要引入 BasicAuth、配置 app.config、实例化BasicAuth,就可以使用BasicAuth了。

from flask import Flask
from flask_basicauth import BasicAuth
app = Flask(__name__)
basic_auth = BasicAuth(app)
//
app.config['BASIC_AUTH_USERNAME'] = 'admin'
app.config['BASIC_AUTH_PASSWORD'] = '123456'
//这里设置为true表示默认对所有的api进行认证;如果设置为False则需要手动添加@basic_auth_required对指定的api进行认证
app.config['BASIC_AUTH_FORCE'] = True

此时我们就可以对我们的api.route接口路径进行拦截认证了

@app.route('/test')
def test():  return 'Hello World!'

Flask-BasicAuth核心源码:

class BasicAuth(object):def __init__(self, app=None):if app is not None:self.app = appself.init_app(app)else:self.app = None//判断是否该api需要进行认证def init_app(self, app):app.config.setdefault('BASIC_AUTH_FORCE', False)app.config.setdefault('BASIC_AUTH_REALM', '')@app.before_requestdef require_basic_auth():if not current_app.config['BASIC_AUTH_FORCE']:returnif not self.authenticate():return self.challenge()//将输出的用户名和密码与默认设置的BASIC_AUTH_USERNAME和BASIC_AUTH_PASSWORD进行比较,判断是否一致def check_credentials(self, username, password):correct_username = current_app.config['BASIC_AUTH_USERNAME']correct_password = current_app.config['BASIC_AUTH_PASSWORD']return username == correct_username and password == correct_password

Java-Interceptor实现

Java中实现BasicAuth认证,一般定义自定义拦截器的方式来实现。

首先需要我们定义一个拦截器:BasicAuthInterceptor

@Slf4j
@Component
public class BasicAuthInterceptor implements HandlerInterceptor {//Controller处理之前调用-即是我们拦截的所在@Overridepublic boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {String auth = httpServletRequest.getHeader("Authorization");if (StrUtil.isNotBlank(auth)) {//加密过程String username = 项目中保存的用户名;String password = 项目中保存的密码;byte[] bytes = ( username + ":" + password).getBytes("utf-8");//采用Base64编码String encode = BasicAuthInfo.BASIC + new BASE64Encoder().encode(bytes).replace("\n", "");//与传入的auth进行对比if (encode.equals(auth)) {return true;}log.error("auth 认证失败!!!");//抛出异常处理}else {log.error("auth 认证信息不存在!!!");//抛出异常处理}}@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {}
}

接着,我们定义一个BasicAuthConfig类,设置需要拦截认证的路径:

@Configuration
public class BasicAuthConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {InterceptorRegistration registration = registry.addInterceptor(new BasicAuthInterceptor());registration//拦截所有请求.addPathPatterns("/**")//这里设置了Swagger放行,可以添加你所需要不进行拦截的路径.excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**", "/doc.html/**");}
}

BasicAuth认证实现相关推荐

  1. linux强制删除后登录不了,【已解决】更新之后无法登录

    昨天更新之后进不去浏览器管理页面 在服务器上可以看到服务正常 [root@jxswkj ~]# bt ===============宝塔面板命令行================== (1) 重启面板 ...

  2. 服务器root账号用户名和密码忘记了,宝塔忘记后台管理员账号密码怎么办?教你用这条命令轻松搞定...

    现在可以说百分之80的网站都在使用宝塔建站,宝塔是什么呢? 宝塔是一款非常受欢迎的服务器可视化管理工具,宝塔面板很多人都在用, 有些站长经常一不小心就把后台登录密码忘记了?或者用户名和密码都忘记了, ...

  3. [已解决]阿里云安全组开放端口,宝塔面板仍无法访问

    前言: 1.购买阿里云轻量应用服务器,系统镜像为CentOS8.2(建议安装Cnetos版本在7-8之间) 2.安装宝塔面板,参考[宝塔面板手册] # Centos安装脚本 yum install - ...

  4. K8s 很难么?带你从头到尾捋一遍,不信你学不会

    点击关注公众号,回复"1024"获取2TB学习资源! 为什么要学习 Kubernetes? 虽然 Docker 已经很强大了,但是在实际使用上还是有诸多不便,比如集群管理.资源调度 ...

  5. 最详细的 K8S 学习笔记总结(2021最新版)

    虽然 Docker 已经很强大了,但是在实际使用上还是有诸多不便,比如集群管理.资源调度.文件管理等等.那么在这样一个百花齐放的容器时代涌现出了很多解决方案,比如 Mesos.Swarm.Kubern ...

  6. wsl虚拟机ubuntu安装宝塔要知道的

    安装之前一定先把自己的用户获得管理员权限再换源,比如阿里源.清华大学源.网易源,不然安装起来很费劲 1.输入命令:sudo su; 2.屏幕上会回显要求输入当前用户密码的提示,输入密码即可获得管理员权 ...

  7. Linux Centos装机全过程总结,小白入(持续更新中...)

    制作U盘启动盘 http://rufus.ie/zh/ https://github.com/pbatard/rufus CSDN 下载rufus 制作方法也比较简单,windows下载后运行,选择要 ...

  8. 万字长文带你 搞定 linux BT 宝塔面板 之外网上快速搭建苹果CMS电影网站

    文章目录 万字长文带你搞定宝塔面板 一.本地搭建宝塔面板及安装ecshop 1.1前言 1.2面板特色功能 1.3安装环境说明 1.4安装BT面板 1.5常用管理命令 1.6 BT面板一键安装LAMP ...

  9. 云服务器网站直接域名登录,[一叶花开]网站搭建-天翼云服务器跳过备案实现可直接访问IP地址以及解析域名...

    网易云日常打卡升级:http://blog.lmzq.work/wyy/index.html 天翼云服务器利用xshell安装宝塔:https://bbs.leyuz.net/t/175795 xsh ...

最新文章

  1. 15个新鲜的单页网站设计实例
  2. String.Format使用方法
  3. javascript漏洞-检测到目标站点存在javascript框架库漏洞
  4. SD--如何在输出控制中增加自定义字段
  5. 解析JVM线程同步机制
  6. 满分简便代码——L1-049 天梯赛座位分配 (20分)
  7. MySQL 实用语句集合
  8. java参数值注入_在springboot中使用注解将值注入参数的操作
  9. UITableView自动计算图片的高度 SDWebImage
  10. [USACO12OPEN]书架Bookshelf
  11. VARCHART XGantt_v5.1用户手册:如何把控件放在表单上
  12. matlab中划分训练集和测试集
  13. 直播换脸后,我们来搞搞微信QQ聊天换脸!| avatarify
  14. linux文件句柄上线的修改,修改Linux文件句柄限制
  15. Python中文社区征稿,最高1000元/篇!
  16. 【webview】微信和PC监听浏览器关闭和刷新(亲测可用)
  17. dom4j解析XML实例
  18. iOS代码质量要求_图片压缩(iOS)
  19. HCIP-IoT MQTT协议技术原理
  20. Checkmarx CxEnterprise企业版静态源代码扫描管理方案

热门文章

  1. 关于企业微信指令回调和数据回调
  2. python—requests模块使用代理
  3. 求幂级数展开的部分和 C语言 PTA 详解
  4. oracle 中的 CONCAT,substring ,MINUS 用法
  5. 摄影测量手动提取立体像对同名点像素,相对定向解算,特征点提取,影像匹配同名点的python实现
  6. [mongoDB]使用Studio 3T连接MongoDB报错Illegal argument: For input string: “23-28-g865b4f6a96“
  7. MySQL索引(B树、B+树)
  8. B树的插入、删除操作
  9. html中如何找到成对标签,操作html标签之找到标签
  10. joinquant RSI策略邮件提醒 python发送邮件