当前位置: 首页 > news >正文

系统网站建设pptseo平台有哪些

系统网站建设ppt,seo平台有哪些,手机制作视频用哪个软件好,wordpress 3.5下载地址写在前面 本文看下http的basic auth认证方式。 1:什么是basic auth认证 basic auth是一种http协议规范中的一种认证方式,即一种证明你就是你的方式。更进一步的它是一种规范,这种规范是这样子,如果是服务端使用了basic auth认证…

写在前面

在这里插入图片描述

本文看下http的basic auth认证方式。

1:什么是basic auth认证

basic auth是一种http协议规范中的一种认证方式,即一种证明你就是你的方式。更进一步的它是一种规范,这种规范是这样子,如果是服务端使用了basic auth认证方式来处理用户请求的话,会从header中获取Authorization的头信息,如果是没有该头信息或者是头信息不正确,则会返回401状态码,并添加WWW-Authenticate响应头。如下代码所示:

String base6AuthStr = req.getHeader("Authorization");
System.out.println("base6AuthStr=" + base6AuthStr); // base6AuthStr=Basic YWFhOmFhYQ==
if (base6AuthStr == null) {res.setStatus(401);res.addHeader("WWW-Authenticate", "basic realm=\"no auth\"");return false;
}
String authStr = new String(decoder.decode(base6AuthStr.substring(6).getBytes()));
System.out.println("authStr=" + authStr); // authStr=xxx:xxxString[] arr = authStr.split(":");
if ("test".equals(arr[0]) && "123456".equals(arr[1])) {res.setStatus(401);res.addHeader("WWW-Authenticate", "basic realm=\"no auth\"");return false;
}

如果是浏览器收到了服务端的401响应,并且判断有www-authenticate头信息的话则会弹出自带的用户名密码录入框让用户录入信息,用户录入后浏览器会对录入的信息按照格式base64(用户名:密码)处理得到一个base64的值,然后按照格式Authorization: basic base64值写到头Authorization,再次发起请求。

2:程序测试

使用springboot方式测试。首先添加依赖和配置文件:

  • application.properties
server.port=8089
server.servlet.context-path=/BootDemo
  • pom
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.1.RELEASE</version><relativePath/>
</parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

接着我们来定义注解,后面将会作为接口是否使用basic auth的标记来使用:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RequireAuth {}

定义拦截器,解析目标接口方法上是否是否用了注解RequireAuth,以及使用时是否携带了正确的WWW-Authenticate头信息,源码如下:

public class RequireAuthInterceptor extends HandlerInterceptorAdapter {final Base64.Decoder decoder = Base64.getDecoder();// final Base64.Encoder encoder = Base64.getEncoder();@Overridepublic boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) throws Exception {// 请求目标为 method of controller,需要进行验证if (handler instanceof HandlerMethod) {HandlerMethod handlerMethod = (HandlerMethod) handler;Object object = handlerMethod.getMethodAnnotation(RequireAuth.class);/* 方法没有 @RequireAuth 注解, 放行 */if (object == null) {return true; // 放行}/* 方法有 @RequireAuth 注解,需要拦截校验 */// 没有 Authorization 请求头,或者 Authorization 认证信息不通过,拦截if (!isAuth(req, res)) {return false; // 拦截}// 验证通过,放行return true;}// 请求目标不是 mehod of controller, 放行return true;}private boolean isAuth(HttpServletRequest req, HttpServletResponse res) {String base6AuthStr = req.getHeader("Authorization");System.out.println("base6AuthStr=" + base6AuthStr); // base6AuthStr=Basic YWFhOmFhYQ==if (base6AuthStr == null) {res.setStatus(401);res.addHeader("WWW-Authenticate", "basic realm=\"no auth\"");return false;}String authStr = new String(decoder.decode(base6AuthStr.substring(6).getBytes()));System.out.println("authStr=" + authStr); // authStr=xxx:xxxString[] arr = authStr.split(":");if (arr != null && arr.length == 2) {String username = arr[0];String password = arr[1];// 校验用户名和密码if ("test".equals(username) && "123456".equals(password)) {return true;}}res.setStatus(401);res.addHeader("WWW-Authenticate", "basic realm=\"no auth\"");
//        res.addHeader("WWW-Authenticate", "basic realm=\"no auth\"");return false;}}

注册拦截器:

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {RequireAuthInterceptor requireAuthInterceptor = new RequireAuthInterceptor();registry.addInterceptor(requireAuthInterceptor);}}

接着定义接口:

@Controller
public class IndexController {private static final Base64.Decoder decoder = Base64.getDecoder();// private static final Base64.Encoder encoder = Base64.getEncoder();@RequireAuth@RequestMapping("/login")@ResponseBodypublic String login(HttpServletRequest req, HttpServletResponse res) {return "{code: 0, data: {username:\"test\"}}";}@RequireAuth@RequestMapping("/index")@ResponseBodypublic String index(HttpServletRequest req, HttpServletResponse res) {return "{code: 0, data: {xxx:\"xxx\"}}";}@RequestMapping("/noBasicAuth")@ResponseBodypublic String noBasicAuth(HttpServletRequest req, HttpServletResponse res) {return "noBasicAuth res";}
}

以上代码我们定义了需要使用basic auth的接口login和index(标记了注解@RequireAuth),以及不需要basic auth的noBasicAuth接口。

启动服务后,首先访问需要basic auth的login接口:
在这里插入图片描述
可以看到浏览器弹出了自带的用户名密码输入框。同时来看下noBasicAuth接口可以是否需要录入用户名密码:
在这里插入图片描述
可以看到是可以的,说明noBasicAuth接口确实是不需要basic auth认证。接着我们回到主线再次访问index接口,输入错误的账号:
在这里插入图片描述
会再次弹出用户名密码录入框(重复质询),输入正确的用户名密码就可以访问接口了:
在这里插入图片描述
这是因为浏览器已经自动添加了Authorization头信息了,如下:
在这里插入图片描述
其值其实就是test:123456base64的结果,如下:
在这里插入图片描述
之后,浏览器就会记录basic auth的认证信息,下次访问会自动带上basic的头,比如访问index:
在这里插入图片描述

写在后面

参考文章列表

秒懂HTTP基本认证(Basic Authentication) 。

HTTP的几种认证方式之BASIC 认证(基本认证) 。

多知道一点

如何清除浏览器记录的basic auth认证信息

清除浏览器缓存即可。

重放攻击

认证的base64结果被盗窃后,不断的使用base64的结果来请求服务器接口。

重复质询

用户名和密码输入错误后,返回401重新弹出登录框,就像正文中所描述的那样。

http://www.hkea.cn/news/409665/

相关文章:

  • 旅游网站建设服务器ip域名解析
  • 企业网站建设三个原则百度指数资讯指数是指什么
  • 房地产集团网站建设方案软文文案案例
  • 阜蒙县建设学校网站是什么北京seo编辑
  • 珠海建设局网站十大经典事件营销案例分析
  • 创建网站开发公司互联网推广引流是做什么的
  • 万盛集团网站建设seo网站推广全程实例
  • 做教育的网站需要资质吗网站怎么开发
  • 微网站怎么做滚动中国万网域名注册官网
  • 个人如何免费建网站seo在线优化工具 si
  • 双线主机可以做彩票网站吗网络推广合作协议
  • 做外贸的b2b网站域名批量查询系统
  • 建设网站需要哪些职位网站建设策划书
  • 苏州网站建设哪里好网站点击排名优化
  • 网站建设收费标准策划百度推广关键词越多越好吗
  • 网站怎么做更新吗如何建立网页
  • 国外建设工程招聘信息网站tool站长工具
  • 专业做相册书的网站电商网站建设制作
  • 银川网站开发公司电话东莞网
  • 环境保护局网站管理制度建设百度指数的主要功能有
  • 安装wordpress提示500错误关键词优化的策略有哪些
  • 企业网站建设公司排名深圳高端seo公司助力企业
  • 做网站套餐网站seo
  • 网站上的代码网页怎么做的下载百度软件
  • 网站功能模块建设搜狗推广
  • 网站做推广有用吗网站页面设计
  • 做简报的网站广州搜发网络科技有限公司
  • 南乐县住房和城乡建设局网站制作网站的步骤是什么
  • 金华做网站最专业的公司搜易网提供的技术服务
  • wordpress适合门户网站吗怎么营销自己的产品