| /* | 
|  *  Copyright (c) 2019-2020, 冷冷 (wangiegie@gmail.com). | 
|  *  <p> | 
|  *  Licensed under the GNU Lesser General Public License 3.0 (the "License"); | 
|  *  you may not use this file except in compliance with the License. | 
|  *  You may obtain a copy of the License at | 
|  *  <p> | 
|  * https://www.gnu.org/licenses/lgpl.html | 
|  *  <p> | 
|  * Unless required by applicable law or agreed to in writing, software | 
|  * distributed under the License is distributed on an "AS IS" BASIS, | 
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  * See the License for the specific language governing permissions and | 
|  * limitations under the License. | 
|  */ | 
|   | 
| package com.mzl.flower.config.security; | 
|   | 
| import cn.hutool.core.codec.Base64; | 
| import cn.hutool.core.util.CharsetUtil; | 
| import lombok.SneakyThrows; | 
| import lombok.experimental.UtilityClass; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.http.HttpHeaders; | 
|   | 
| import javax.servlet.http.HttpServletRequest; | 
|   | 
| /** | 
|  * 认证授权相关工具类 | 
|  */ | 
| @Slf4j | 
| @UtilityClass | 
| public class AuthUtils { | 
|     private final String BASIC_ = "Basic "; | 
|   | 
|     /** | 
|      * 从header 请求中的clientId/clientsecect | 
|      * | 
|      * @param header header中的参数 | 
|      */ | 
|     @SneakyThrows | 
|     public String[] extractAndDecodeHeader(String header) { | 
|   | 
|         byte[] base64Token = header.substring(6).getBytes("UTF-8"); | 
|         byte[] decoded; | 
|         try { | 
|             decoded = Base64.decode(base64Token); | 
|         } catch (IllegalArgumentException e) { | 
|             throw new RuntimeException( | 
|                     "Failed to decode basic authentication token"); | 
|         } | 
|   | 
|         String token = new String(decoded, CharsetUtil.UTF_8); | 
|   | 
|         int delim = token.indexOf(":"); | 
|   | 
|         if (delim == -1) { | 
|             throw new RuntimeException("Invalid basic authentication token"); | 
|         } | 
|         return new String[]{token.substring(0, delim), token.substring(delim + 1)}; | 
|     } | 
|   | 
|     /** | 
|      * *从header 请求中的clientId/clientsecect | 
|      * | 
|      * @param request | 
|      * @return | 
|      */ | 
|     @SneakyThrows | 
|     public String[] extractAndDecodeHeader(HttpServletRequest request) { | 
|         String header = request.getHeader(HttpHeaders.AUTHORIZATION); | 
|   | 
|         if (header == null || !header.startsWith(BASIC_)) { | 
|             throw new RuntimeException("请求头中client信息为空"); | 
|         } | 
|   | 
|         return extractAndDecodeHeader(header); | 
|     } | 
| } |