版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第SpringBoot實(shí)現(xiàn)任意位置獲取HttpServletRequest對(duì)象//獲取RequestAttributes
RequestAttributesrequestAttributes=RequestContextHolder.getRequestAttributes();
//從獲取RequestAttributes中獲取HttpServletRequest的信息
HttpServletRequestrequest=(HttpServletRequest)requestAttributes.resolveReference(RequestAttributes.REFERENCE_REQUEST);
ServletRequestAttributesattributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequestrequest=attributes.getRequest();
HttpServletRequest只能讀取一次的解決
業(yè)務(wù)邏輯,通過filter讀取請(qǐng)求的request,獲取token,并將token傳遞后面流程使用
BodyReaderHttpServletRequestWrapper:
publicclassBodyReaderHttpServletRequestWrapperextendsHttpServletRequestWrapper{
privatefinalbyte[]body;
publicBodyReaderHttpServletRequestWrapper(HttpServletRequestrequest)throwsIOException{
super(request);
body=HttpHelper.getBodyString(request).getBytes(Charset.forName(UTF-8));
@Override
publicBufferedReadergetReader()throwsIOException{
returnnewBufferedReader(newInputStreamReader(getInputStream()));
@Override
publicServletInputStreamgetInputStream()throwsIOException{
finalByteArrayInputStreambyteArrayInputStream=newByteArrayInputStream(body);
returnnewServletInputStream(){
@Override
publicintread()throwsIOException{
returnbyteArrayInputStream.read();
@Override
publicbooleanisFinished(){
returnfalse;
@Override
publicbooleanisReady(){
returnfalse;
@Override
publicvoidsetReadListener(ReadListenerreadListener){
}
RepeatReadFilter:
*封裝HttpServletRequest為可重復(fù)讀取請(qǐng)求
publicclassRepeatReadFilterimplementsFilter{
@Override
publicvoidinit(FilterConfigfilterConfig)throwsServletException{
@Override
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)
throwsIOException,ServletException{
HttpServletRequesthttpServletRequest=(HttpServletRequest)request;
//防止流讀取一次后就沒有了,所以需要將流繼續(xù)寫出去
ServletRequestrequestWrapper=newBodyReaderHttpServletRequestWrapper(httpServletRequest);
//獲取用戶憑證
Stringtoken=httpServletRequest.getHeader(Constants.USER_TOKEN);
if(StringUtils.isBlank(token)){
token=httpServletRequest.getParameter(Constants.USER_TOKEN);
//=================獲取json格式的token字段=========================
Stringbody=HttpHelper.getBodyString(requestWrapper);
if(StringUtils.isNotBlank(body)){
JSONObjectjsonObject=JSONObject.parseObject(body);
Objectobj=jsonObject.get(token
if(null!=obj){
token=obj.toString();
requestWrapper.setAttribute(Constants.USER_TOKEN,token);
chain.doFilter(requestWrapper,response);
@Override
publicvoiddestroy(){
FilterConfig:
@Configuration
publicclassFilterConfig{
@Bean
publicFilterRegistrationBeanregistFilter(){
FilterRegistrationBeanregistration=newFilterRegistrationBean();
registration.setFilter(newRepeatReadFilter());
registration.addUrlPatterns(/app/*
registration.setName(UrlFilter
registration.setOrder(1);
returnregistration;
AuthorizationInterceptor:
@Component
publicclassAuthorizationInterceptorextendsHandlerInterceptorAdapter{
@Override
publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{
AuthIgnoreannotation;
if(handlerinstanceofHandlerMethod){
annotation=((HandlerMethod)handler).getMethodAnnotation(AuthIgnore.class);
}else{
returntrue;
//如果有@AuthIgnore注解,則不驗(yàn)證token
if(annotation!=null){
returntrue;
//獲取用戶憑證
Stringtoken=request.getHeader(Constants.USER_TOKEN);
if(StringUtils.isBlank(token)){
token=request.getParameter(Constants.USER_TOKEN);
if(StringUtils.isBlank(token)){
Objectobj=request.getAttribute(Constants.USER_TOKEN);
if(null!=obj){
token=obj.toString();
//token憑證為空
if(StringUtils.isBlank(token)){
thrownewAuthException(Constants.USER_TOKEN+不能為空,HttpStatus.UNAUTHORIZED.value());
returntrue;
WebMvcConfig:
@Configuration
publicclassWebMvcConfigextendsWebMvcConfigurerAdapter{
@Autowired
privateAuthorizationInterceptorauthorizationInterceptor;
//@Autowired
//privateLoginUserHandlerMethodArgumentResolverloginUserHandlerMethodArgumentResolver;
@Override
publicvoidaddInterceptors(InterceptorRegistryregistry){
registry.addInterceptor(authorizationInterceptor).addPathPatterns(/**
super.addInterceptors(registry);
@Override
publicvoidaddArgumentResolvers(ListHandlerMethodArgumentResolverargumentResolvers){
//argumentResolvers.add(loginUserHandlerMethodArgumentResolver);
@Override
publicvoidconfigureMessageConverters(ListHttpMessageConverterconverters){
super.configureMessageConverters(converters);
@Override
publicvoidextendMessageConverters(ListHttpMessageConverterconverters){
在filter中讀取token,在interceptor中進(jìn)行讀取判斷使用
HttpHelper:
publicclassHttpHelper{
*獲取請(qǐng)求Body
*@paramrequest
*@return
publicstaticStringgetBodyString(ServletRequestrequest){
StringBuildersb=newStringBuilder();
InputStreaminputStream=null;
BufferedReaderreader=null;
try{
inputStream=request.getInputStream();
reader=newBufferedReader(newInputStreamReader(inputStream,Charset.forName(UTF-8)));
Stringline=
while((line=reader.readLine())!=null){
sb.append(line);
}catch(IOExceptione){
e.printStackTrace();
}f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026江西省歐潭人力資源集團(tuán)有限公司招聘見習(xí)生3人筆試參考題庫及答案解析
- 2026上半年貴州事業(yè)單位聯(lián)考赫章縣招聘153人筆試備考試題及答案解析
- 2026年工程地質(zhì)勘察中的質(zhì)量保證措施
- 2026年土地利用中的地質(zhì)災(zāi)害防范策略
- 2025年少先隊(duì)提前入隊(duì)筆試題及答案
- 2025年廣東廣業(yè)投資集團(tuán)筆試及答案
- 2026新興際華集團(tuán)所屬中新聯(lián)公司招聘事業(yè)部總經(jīng)理副總經(jīng)理筆試模擬試題及答案解析
- 2025年材料類事業(yè)單位考試真題及答案
- 2026年臨界含水率對(duì)土壤材料的影響
- 2026四川能投綜合能源有限責(zé)任公司員工招聘19人筆試備考試題及答案解析
- 2026年及未來5年中國TFT液晶面板行業(yè)市場(chǎng)發(fā)展數(shù)據(jù)監(jiān)測(cè)及投資方向研究報(bào)告
- 大唐集團(tuán)機(jī)考行測(cè)題庫
- 車輛日常安全檢查課件
- 民航安全法律法規(guī)課件
- 山東省濟(jì)寧市2026屆第一學(xué)期高三質(zhì)量檢測(cè)期末考試濟(jì)寧一模英語(含答案)
- 光伏電站巡檢培訓(xùn)課件
- 中建建筑電氣系統(tǒng)調(diào)試指導(dǎo)手冊(cè)
- 年末節(jié)前安全教育培訓(xùn)
- 安全生產(chǎn)麻痹思想僥幸心理
- GB/T 93-2025緊固件彈簧墊圈標(biāo)準(zhǔn)型
- 建設(shè)工程測(cè)繪驗(yàn)線標(biāo)準(zhǔn)報(bào)告模板
評(píng)論
0/150
提交評(píng)論