BasicAuth认证实现
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认证实现相关推荐
- linux强制删除后登录不了,【已解决】更新之后无法登录
昨天更新之后进不去浏览器管理页面 在服务器上可以看到服务正常 [root@jxswkj ~]# bt ===============宝塔面板命令行================== (1) 重启面板 ...
- 服务器root账号用户名和密码忘记了,宝塔忘记后台管理员账号密码怎么办?教你用这条命令轻松搞定...
现在可以说百分之80的网站都在使用宝塔建站,宝塔是什么呢? 宝塔是一款非常受欢迎的服务器可视化管理工具,宝塔面板很多人都在用, 有些站长经常一不小心就把后台登录密码忘记了?或者用户名和密码都忘记了, ...
- [已解决]阿里云安全组开放端口,宝塔面板仍无法访问
前言: 1.购买阿里云轻量应用服务器,系统镜像为CentOS8.2(建议安装Cnetos版本在7-8之间) 2.安装宝塔面板,参考[宝塔面板手册] # Centos安装脚本 yum install - ...
- K8s 很难么?带你从头到尾捋一遍,不信你学不会
点击关注公众号,回复"1024"获取2TB学习资源! 为什么要学习 Kubernetes? 虽然 Docker 已经很强大了,但是在实际使用上还是有诸多不便,比如集群管理.资源调度 ...
- 最详细的 K8S 学习笔记总结(2021最新版)
虽然 Docker 已经很强大了,但是在实际使用上还是有诸多不便,比如集群管理.资源调度.文件管理等等.那么在这样一个百花齐放的容器时代涌现出了很多解决方案,比如 Mesos.Swarm.Kubern ...
- wsl虚拟机ubuntu安装宝塔要知道的
安装之前一定先把自己的用户获得管理员权限再换源,比如阿里源.清华大学源.网易源,不然安装起来很费劲 1.输入命令:sudo su; 2.屏幕上会回显要求输入当前用户密码的提示,输入密码即可获得管理员权 ...
- Linux Centos装机全过程总结,小白入(持续更新中...)
制作U盘启动盘 http://rufus.ie/zh/ https://github.com/pbatard/rufus CSDN 下载rufus 制作方法也比较简单,windows下载后运行,选择要 ...
- 万字长文带你 搞定 linux BT 宝塔面板 之外网上快速搭建苹果CMS电影网站
文章目录 万字长文带你搞定宝塔面板 一.本地搭建宝塔面板及安装ecshop 1.1前言 1.2面板特色功能 1.3安装环境说明 1.4安装BT面板 1.5常用管理命令 1.6 BT面板一键安装LAMP ...
- 云服务器网站直接域名登录,[一叶花开]网站搭建-天翼云服务器跳过备案实现可直接访问IP地址以及解析域名...
网易云日常打卡升级:http://blog.lmzq.work/wyy/index.html 天翼云服务器利用xshell安装宝塔:https://bbs.leyuz.net/t/175795 xsh ...
最新文章
- 15个新鲜的单页网站设计实例
- String.Format使用方法
- javascript漏洞-检测到目标站点存在javascript框架库漏洞
- SD--如何在输出控制中增加自定义字段
- 解析JVM线程同步机制
- 满分简便代码——L1-049 天梯赛座位分配 (20分)
- MySQL 实用语句集合
- java参数值注入_在springboot中使用注解将值注入参数的操作
- UITableView自动计算图片的高度 SDWebImage
- [USACO12OPEN]书架Bookshelf
- VARCHART XGantt_v5.1用户手册:如何把控件放在表单上
- matlab中划分训练集和测试集
- 直播换脸后,我们来搞搞微信QQ聊天换脸!| avatarify
- linux文件句柄上线的修改,修改Linux文件句柄限制
- Python中文社区征稿,最高1000元/篇!
- 【webview】微信和PC监听浏览器关闭和刷新(亲测可用)
- dom4j解析XML实例
- iOS代码质量要求_图片压缩(iOS)
- HCIP-IoT MQTT协议技术原理
- Checkmarx CxEnterprise企业版静态源代码扫描管理方案
热门文章
- 关于企业微信指令回调和数据回调
- python—requests模块使用代理
- 求幂级数展开的部分和 C语言 PTA 详解
- oracle 中的 CONCAT,substring ,MINUS 用法
- 摄影测量手动提取立体像对同名点像素,相对定向解算,特征点提取,影像匹配同名点的python实现
- [mongoDB]使用Studio 3T连接MongoDB报错Illegal argument: For input string: “23-28-g865b4f6a96“
- MySQL索引(B树、B+树)
- B树的插入、删除操作
- html中如何找到成对标签,操作html标签之找到标签
- joinquant RSI策略邮件提醒 python发送邮件