JAVA 中 HTTP 基本认证(Basic Authentication)

JAVA 中 HTTP 基本认证(Basic Authentication)

码农世界 2024-05-24 前端 62 次浏览 0个评论

目录

  • 服务端这么做
    • 服务端告知客户端使用 Basic Authentication 方式进行认证
    • 服务端接收并处理客户端按照 Basic Authentication 方式发送的数据
    • 客户端这么做
      • 如果客户端是浏览器
      • 如果客户端是 RestTemplat
      • 如果客户端是 HttpClient
      • 其它
      • 参考

        服务端这么做

        1. 服务端告知客户端使用 Basic Authentication 方式进行认证
        2. 服务端接收并处理客户端按照 Basic Authentication 方式发送的数据

        服务端告知客户端使用 Basic Authentication 方式进行认证

        • 服务端返回 401(Unauthozied)状态码给客户端
        • 服务端在Response 的 header “WWW-Authenticate” 中添加信息

          服务端接收并处理客户端按照 Basic Authentication 方式发送的数据

          private boolean checkBasicAuthorization(HttpServletRequest request) {
          	String rawStringAuthorization = request.getHeader("Authorization");
          	Assert.isTrue(StringUtils.startsWith(rawStringAuthorization, "Basic"), "Basic 认证失败");
          	String base64StringAuthorization = StringUtils.replaceOnce(rawStringAuthorization, "Basic", "");
          	base64StringAuthorization = StringUtils.trim(base64StringAuthorization);
          	
          	byte[] bytesAuthorization = Base64Utils.decodeFromString(base64StringAuthorization);
          	String stringAuthorization = new String(bytesAuthorization);
          	
          	String[] arrUserAndPass = StringUtils.split(stringAuthorization, ":");
          	Assert.isTrue(2==arrUserAndPass.length, "Basic 认证失败");
          	
          	String username = arrUserAndPass[0];
          	String password = arrUserAndPass[1];
          	
          	if (StringUtils.equals(username, "myuser") && StringUtils.equals(password, "mypassword")) {
          		return true;
          	}
          	
          	return false;
          }
          
          • org.apache.commons.lang3.StringUtils
          • org.springframework.util.Base64Utils

            客户端这么做

            客户端按照 Basic Authentication 方式向服务端发送数据

            如果客户端是浏览器

            浏览器支持 Basic Authentication 方式认证。浏览器会自动弹出提示窗体,并自动向该地址发送认证请求。

            浏览器自动弹出的对话框:

            点击“登录”后,浏览器自动向该地址发送请求:

            • 输入用户名:myuser,密码:mypassword
            • “bXl1c2VyOm15cGFzc3dvcmQ=” = base64("myuser:mypassword")

              如果客户端是 RestTemplat

              @Configuration
              public class RestTemplateConfig {
              	@Bean
              	public RestTemplate restTemplate() {
              		RestTemplate restTemplate = new RestTemplate();
              		restTemplate.getInterceptors()
              			.add(new BasicAuthenticationInterceptor("myuser","mypassword")); 
              ;
              		
              		return restTemplate;
              	}
              }
              

              如果客户端是 HttpClient

              其它

              Basic Authentication 方式的认证,通常不需要登录页面,只需要登录Action即可。

              参考

              https://developer.atlassian.com/server/jira/platform/basic-authentication/

转载请注明来自码农世界,本文标题:《JAVA 中 HTTP 基本认证(Basic Authentication)》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,62人围观)参与讨论

还没有评论,来说两句吧...

Top