日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

單點(diǎn)登錄失敗解決措施 單點(diǎn)登錄框架有哪些( 五 )

資源服務(wù)令牌解析配置package com.jt.resource.config;import com.fasterxml.jackson.databind.ObjectMapper;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;import org.springframework.security.oauth2.provider.token.TokenStore;import org.springframework.security.web.access.AccessDeniedHandler;import javax.servlet.http.HttpServletResponse;import java.io.PrintWriter;import java.util.HashMap;import java.util.Map;@Configuration@EnableResourceServer@EnableGlobalMethodSecurity(prePostEnabled = true)public class ResourceServerConfig extends ResourceServerConfigurerAdapter {@Autowiredprivate TokenStore tokenStore;/*** token服務(wù)配置*/@Overridepublic void configure(ResourceServerSecurityConfigurer resources) throws Exception {resources.tokenStore(tokenStore);}/*** 路由安全認(rèn)證配置*/@Overridepublic void configure(HttpSecurity http) throws Exception {http.csrf().disable();http.exceptionHandling().accessDeniedHandler(accessDeniedHandler());http.authorizeRequests().anyRequest().permitAll();}//沒有權(quán)限時(shí)執(zhí)行此處理器方法public AccessDeniedHandler accessDeniedHandler() {return (request, response, e) -> {Map<String, Object> map = new HashMap<>();map.put("state", HttpServletResponse.SC_FORBIDDEN);//SC_FORBIDDEN的值是403map.put("message", "沒有訪問權(quán)限,請(qǐng)聯(lián)系管理員");//1設(shè)置響應(yīng)數(shù)據(jù)的編碼response.setCharacterEncoding("utf-8");//2告訴瀏覽器響應(yīng)數(shù)據(jù)的內(nèi)容類型以及編碼response.setContentType("application/json;charset=utf-8");//3獲取輸出流對(duì)象PrintWriter out=response.getWriter();//4 輸出數(shù)據(jù)String result=new ObjectMapper().writeValueAsString(map);out.println(result);out.flush();};}}ResourceController 方法配置在controller的上傳方法上添加 @PreAuthorize(“hasAuthority(‘sys:res:create’)”)注解,用于告訴底層框架方法此方法需要具備的權(quán)限,例如
@PreAuthorize("hasAuthority('sys:res:create')")@PostMapping("/upload/")public String uploadFile(MultipartFile uploadFile) throws IOException {...}啟動(dòng)服務(wù)訪問測(cè)試

  • 第一步:啟動(dòng)服務(wù)(sca-auth,sca-resource-gateway,sca-resource)
  • 第二步:執(zhí)行登陸獲取access_token令牌
  • 第三步:攜帶令牌訪問資源(url中的前綴”sca”是在資源服務(wù)器中自己指定的,你的網(wǎng)關(guān)怎么配置的,你就怎么寫)
設(shè)置請(qǐng)求頭(header),要攜帶令牌并指定請(qǐng)求的內(nèi)容類型,例如

單點(diǎn)登錄失敗解決措施 單點(diǎn)登錄框架有哪些


設(shè)置請(qǐng)求體(body),設(shè)置form-data,key要求為file類型,參數(shù)名與你服務(wù)端controller文件上傳方法的參數(shù)名相同,值為你選擇的文件,例如

單點(diǎn)登錄失敗解決措施 單點(diǎn)登錄框架有哪些


上傳成功會(huì)顯示你訪問文件需要的路徑,假如沒有權(quán)限會(huì)提示你沒有訪問權(quán)限 。
文件上傳JS方法設(shè)計(jì) function upload(file){//定義一個(gè)表單let form=new FormData();//將圖片添加到表單中form.append("uploadFile",file);let url="http://localhost:9000/sca/resource/upload/";//異步提交方式1axios.post(url,form,{headers:{"Authorization":"Bearer "+localStorage.getItem("accessToken")}}).then(function (response){let result=response.data;if(result.state==403){alert(result.message);return;}alert("upload ok");})}技術(shù)摘要應(yīng)用實(shí)踐說明背景分析企業(yè)中數(shù)據(jù)是最重要的資源,對(duì)于這些數(shù)據(jù)而言,有些可以直接匿名訪問,有些只能登錄以后才能訪問,還有一些你登錄成功以后,權(quán)限不夠也不能訪問.總之這些規(guī)則都是保護(hù)系統(tǒng)資源不被破壞的一種手段.幾乎每個(gè)系統(tǒng)中都需要這樣的措施對(duì)數(shù)據(jù)(資源)進(jìn)行保護(hù).我們通常會(huì)通過軟件技術(shù)對(duì)這樣業(yè)務(wù)進(jìn)行具體的設(shè)計(jì)和實(shí)現(xiàn).早期沒有統(tǒng)一的標(biāo)準(zhǔn),每個(gè)系統(tǒng)都有自己獨(dú)立的設(shè)計(jì)實(shí)現(xiàn),但是對(duì)于這個(gè)業(yè)務(wù)又是一個(gè)共性,后續(xù)市場(chǎng)上就基于共性做了具體的落地實(shí)現(xiàn),例如Spring Security,Apache shiro,JWT,Oauth2等技術(shù)誕生了.

推薦閱讀