多氯聯苯傳給下一代 半數的虎鯨將在50年後死亡

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務

除了獲取 MAC 地址還能幹啥

        以前寫過一篇《》的文章,文章的地址是:https://www.cnblogs.com/tosser/p/9022187.html,我當時使用 OCX 來實現,可是 OCX 只支持 IE 瀏覽器,後來在往上找了一個 Chrome 的擴展,也解決了該問題。不過,總覺得無論使用 OCX 還是使用 Chrome 的擴展,都是瀏覽器相關的,並不通用。後來,使用 Socket 寫了一個簡單的 DEMO,用來模擬 HTTP 服務器,然後使用 Ajax 進行通信,問題解決了。也不再是瀏覽器相關了。

 

Web 頁面獲取 MAC 地址的設計思路

        Web 頁面獲取 MAC 地址的設計思路是比較簡單的,只需要在本地模擬一個 HTTP 服務器,然後讓 Web 頁面通過 Ajax 來請求 HTTP 服務器,HTTP 服務器直接返回本機的 MAC 地址就可以了。

        具體流程如下圖:

 

        流程圖非常的清楚,主要就是 HostServer 和 Ajax 的通信,這樣就可以得到 MAC 地址,然後通過 DOM 操作,即可把 MAC 地址寫入到 input 框中。這樣,就可以和用戶名、密碼一起提交給服務器進行驗證了。

 

 

 

除了獲取 MAC 地址還能幹啥

 

       之前做過一個物流提貨的項目,涉及到一些硬件設備,包括:小票打印機、刷卡器(身份證、銀聯卡)、進幣器、密碼数字鍵盤等。這些設備、電腦主機和显示器在一個類似 ATM 機那樣的機櫃中(其實就是 ATM 機的設備,本身這套東西就是銀行提供的)。

 

       操作這些硬件的接口廠家提供了一個 OCX,而整個項目是 B/S 架構的。那麼,在客戶端想要操作這些硬件,就要調用 OCX,而 OCX 只能在 IE 瀏覽器下使用(Chrome、FireFox 是不支持 OCX 的)。眾所周知,IE 對 Web 並不友好,但是如何又能在不使用 IE 的情況下,又去調用 OCX 來完成操作硬件的功能呢?那麼就是我們上面的方法了。

 

       簡單的描述一下,就不貼圖了。

 

       在終端上放一個 HostServer 用來接受頁面中 Ajax 的請求,並根據請求去調用 OCX 中相應的功能,把 OCX 的返回信息,再以 Json 的格式返回給 Ajax 即可。

 

       這樣,把 瀏覽器 和 OCX 文件進行了分離,中間加入了一個 HostServer,頁面 和 OCX 的通信通過了 HostServer,那麼以後如果接口是 DLL 文件,也可以通過 HostServer 來進行完成,當然,還可以完成更多的功能。

 

 

 

總結

        其實整個獲取 MAC 地址的功能,對於登錄頁面而言是一個服務端,它在本地是一個可執行的程序,那麼它和普通的 EXE 文件是沒有區別的,那麼它能完成的功能其實遠遠不是獲取一個 MAC 地址的功能,對於上面的例子來說,把服務的提供者和使用者進行了分離,而且針對於本機的擴展也十分的方便了。當然,如果你願意的話,可以讓 HostServer 充當客戶端直接和後端的服務器進行通信而不通過瀏覽器,這樣是不是還能做一些讓用戶沒有感知的事情?

 

 

我的微信公眾號:“碼農UP2U”

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務

asp.net core 自定義 Policy 替換 AllowAnonymous 的行為

asp.net core 自定義 Policy 替換 AllowAnonymous 的行為

Intro

最近對我們的服務進行了改造,原本內部服務在內部可以匿名調用,現在增加了限制,通過 identity server 來管理 api 和 client,網關和需要訪問api的客戶端或api服務相互調用通過 client_credencial 的方式來調用,這樣一來我們可以清晰知道哪些 api 服務會被哪些 api/client 所調用,而且安全性來說更好。
為了保持後端服務的代碼更好的兼容性,希望能夠實現相同的代碼通過在 Startup 里不同的配置實現不同的 Authorization 邏輯,原來我們的服務的 Authorize 都是以 Authorize("policyName") 的形式來寫的,這樣一來我們只需要修改這個 Policy 的授權配置就可以了。對於 AllowAnonymous 就希望可以通過一種類似的方式來實現,通過自定義一個 Policy 來實現自己的邏輯

實現方式

將 action 上的 AllowAnonymous 替換為 Authorize("policyName"),在沒有設置 Authorize 的 controller 上增加 Authorize("policyName")

public class AllowAnonymousPolicyTransformer : IApplicationModelConvention
{
    private readonly string _policyName;

    public AllowAnonymousPolicyTransformer() : this("anonymous")
    {
    }

    public AllowAnonymousPolicyTransformer(string policyName) => _policyName = policyName;

    public void Apply(ApplicationModel application)
    {
        foreach (var controllerModel in application.Controllers)
        {
            if (controllerModel.Filters.Any(_ => _.GetType() == typeof(AuthorizeFilter)))
            {
                foreach (var actionModel in controllerModel.Actions)
                {
                    if (actionModel.Filters.Any(_ => _.GetType() == typeof(AllowAnonymousFilter)))
                    {
                        var allowAnonymousFilter = actionModel.Filters.First(_ => _.GetType() == typeof(AllowAnonymousFilter));
                        actionModel.Filters.Remove(allowAnonymousFilter);
                        actionModel.Filters.Add(new AuthorizeFilter(_policyName));
                    }
                }
            }
            else
            {
                if (controllerModel.Filters.Any(_ => _.GetType() == typeof(AllowAnonymousFilter)))
                {
                    var allowAnonymousFilter = controllerModel.Filters.First(_ => _.GetType() == typeof(AllowAnonymousFilter));
                    controllerModel.Filters.Remove(allowAnonymousFilter);
                }
                controllerModel.Filters.Add(new AuthorizeFilter(_policyName));
            }
        }
    }
}

public static class MvcBuilderExtensions
{
    public static IMvcBuilder AddAnonymousPolicyTransformer(this IMvcBuilder builder)
    {
        builder.Services.Configure<MvcOptions>(options =>
        {
            options.Conventions.Insert(0, new AllowAnonymousPolicyTransformer());
        });
        return builder;
    }

    public static IMvcBuilder AddAnonymousPolicyTransformer(this IMvcBuilder builder, string policyName)
    {
        builder.Services.Configure<MvcOptions>(options =>
        {
            options.Conventions.Insert(0, new AllowAnonymousPolicyTransformer(policyName));
        });
        return builder;
    }
}

controller 中的代碼:

[Route("api/[controller]")]
public class ValuesController : Controller
{
    private readonly ILogger _logger;

    public ValuesController(ILogger<ValuesController> logger)
    {
        _logger = logger;
    }

    // GET api/values
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        var msg = $"IsAuthenticated: {User.Identity.IsAuthenticated} ,UserName: {User.Identity.Name}";
        _logger.LogInformation(msg);
        return new string[] { msg };
    }

    // GET api/values/5
    [Authorize]
    [HttpGet("{id:int}")]
    public ActionResult<string> Get(int id)
    {
        return "value";
    }
    // ...
}

Startup 中 ConfigureServices 配置:

var anonymousPolicyName = "anonymous";

services.AddAuthorization(options =>
{
    options.AddPolicy(anonymousPolicyName, builder => builder.RequireAssertion(context => context.User.Identity.IsAuthenticated));

    options.DefaultPolicy = new AuthorizationPolicyBuilder(HeaderAuthenticationDefaults.AuthenticationSchema)
        .RequireAuthenticatedUser()
        .RequireAssertion(context => context.User.GetUserId<int>() > 0)
        .Build();
});

services.AddMvc(options =>
    {
        options.Conventions.Add(new ApiControllerVersionConvention());
    })
    .AddAnonymousPolicyTransformer(anonymousPolicyName)
    ;

實現效果

訪問原來的匿名接口

userId 為0訪問原來的匿名接口

userId 大於0訪問原來的匿名接口

userId 為0訪問需要登錄的接口

userId 大於0訪問需要登錄的接口

More

注:按照上面的做法已經可以做到自定義 policy 代替 AllowAnonymous 的行為,但是原來返回的401,現在可能返回到就是 403 了

Reference

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務

挪威擬修法禁售汽油車

做為全球電動車市佔率最高的國家,挪威政府對於推行採用電動車不遺餘力。外媒報導,挪威打算進一步修法,目標是在2025年時達成全面禁售汽油車。

挪威目前有24%的汽車屬電動車,去年登記在案的電動車超過五萬輛,且首都奧斯陸是全球電動車密度最高的城市。據外媒《獨立報》、《Dagens Naeringsliv》等媒體報導,挪威朝野四大黨的國會議員已達成立法共識,計畫在2025年前全面禁售或者大量減產汽油車;若計畫順利,挪威將成為全球第一個全面改用電動車的國家。

但由於挪威高度依賴石油產業,此決議是否成行、若成行後會對國家產業帶來何種衝擊,仍在評估當中。

對於這項提案,特斯拉(Tesla)執行長Elon Musk在推特上表示:「這國家太讚了!」若挪威正式通過這項法案,將在國際間產生示範效果,再次推高電動車的接受度。

Just heard that Norway will ban new sales of fuel cars in 2025. What an amazingly awesome country. You guys rock!!

— Elon Musk (@elonmusk)

 

(首頁圖片來源:)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務

車用顯示及光學技術研討會 – 2016 台北光電周展場直擊

在光電協會(PIDA)所舉辦的一系列車IOT與車用光電的研討會當中。針對了車用顯示以及光學技術領域。PIDA邀請了幾位業界專家與與會者分享最新的技術動態。   成立於2014年的及至微電機公司,在本次研討會由陳明舜處長為我們分享的主題是雷射掃描在車用電子系統的應用。及至微以MEMS Mirror為核心技術, 整合光學、機械、電子、軟體技術, 以雙軸的MEMS Scanner,搭配RGB 雷射光源,提供雷射投影模組汽車的HUD應用當中。   陳明舜處長分享了未來汽車顯示器的技術走向,包括Tesla等汽車都已經把儀表板的訊息整合到車用面板了,未來有機會用光學投影的方式來呈現出更多行車資訊。其中用雷射投影的方式,其原理是利用RGB雷射光束將畫面掃描出來,對比度高,且沒有對焦問題,可以投影在任何的曲面的物體上面。儘管雷射投影模組的價格昂貴,目前都還要USD 200元/組,其中雷射光源佔了主要的成本結構比重非常高,但隨著各家雷射光源廠商技術有所突破以及大量生產,價格有機會下降。

▲及至微的雷射投影系統   而怡利電子的陳儒賢經理則是分享了車用抬頭顯示器的技術發展趨勢。目前的HUD大致上可以分為下列三種:   Windshield HUD: 部分的BMW車種搭載了 Windshield HUD。透過HUD系統將車速,導航訊息利用投影的方式,將虛像投影至前擋玻璃前方2.5M的距離。其原理主要透過反射方式將光線投影至眼睛中,因此前擋玻璃也需要經過特殊處理。包括讓想要呈現的虛像能更折射到眼睛,該前擋玻璃又能夠看到前方的車況。因此該玻璃需有不同厚度與特殊角度,來消除掉重疊影像。因此該套系統的成本十分高昂,另外駕駛座前方也需要保留很大的空間來安裝這套HUD系統。   HUD Combiner: 由於前述提到的Windshield HUD成本過於高昂,因此各家車廠想盡辦法降低成本。而折衷的方式,就是另外做一個經過特殊處理的前擋玻璃,與投射系統整合成整套模組。但因為模組沒有辦法懸空,因此該玻璃的位置與眼睛無法呈現水平。光路較短,虛擬影像距離縮短,僅1~2M。   LED/TFT reflector: 這是較為常見的系統,且大量應用在後裝市場的系統。利用LED矩陣式投影或者是TFT面板反射影像在汽車的前擋玻璃的膜片上。因此眼睛看到的是實像。而LED矩陣能夠顯示的信息較為有限,最多僅能顯示數字與符號。至於TFT面板反射投影雖然能夠提供較多的影像信息,但是在戶外陽光充足的環境下,TFT面板的亮度需要達到一萬nits以上,影像才不會被陽光干擾。

 
▲怡利電子   合盈光電的許玄岳董事長則是介紹了全球車用攝影機的發展趨勢。在自動駕駛時代來臨下,每台汽車至少需要裝配6-7個攝影機。而這些攝影機的鏡頭如何在戶外的環境下,能夠不被雨水干擾影像,或是沙塵刮傷鏡頭都是需要處理的課題。合盈光電目前除了針對車用鏡頭的材料開發方面做了許多努力之外,也開發出結合倒車影像以及紅外線雷射距離偵測系統。許董事長提到,2018年全美所有車子都需要裝配倒車影像攝影機。若可以將倒車影像攝影機以及距離偵測功能整合在一起,就不需要再多一個倒車雷達了,以目前汽車每年的銷售數量約九千萬台,一台倒車雷達約US$100元,車廠一年可以省下90億美金。   許董事長強調,合盈光電在車用光電的發展方向會將電子,光學,材料,軟體,MEMS等各種技術做整合。而台灣的優勢在於電子產業供應鏈相當完整,方圓一百公里內都可以找到各種供應商。但對於發展汽車電子產業最大挑戰在於台灣的市場太小,沒有龐大的汽車品牌以及汽車工業支持。許多技術都還是要去接觸德國,日本等汽車原廠才有機會導入。加上電子業者對於車規不了解,將是發展汽車電子產業的最大障礙。

▲合盈光電 (本文內容由授權使用)  

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務

Gogoro獲全球首張電動機車用電池UL 2271認證

全球安全科學檢驗實驗室Underwriters Laboratories (UL) 宣布台灣電動機車品牌Gogoro 所研發的智慧電池通過UL 2271測試認證。UL 2271是全球第一本針對輕型電動機車電池推出的安全標準,而Gogoro的車用鋰電池則獲得了全球首張認證書。

Gogoro除拔得頭籌取得UL 2271認證外,也是前全球唯一同時取得UL、IEC、CNS三項標準核可的廠商,將可讓Gogoro在站穩台灣電動機車市場龍頭之餘,進一步跨入歐洲、北美等國際市場。

UL 能源系統與電動交通產業全球工程總監Francisco Martinez 表示,台灣有成為全球電動機車發展重鎮的實力,而UL 2271則聚焦於電動機車之鋰電池安全性的檢測與審查,且格外重視特殊使用條件與環境氣候的測試,以考驗安全性問題。

根據定義,UL 2271 標準係針對輕型電動車電池產品,評估其在一般道路與越野特定道路環境下的使用情況。該標準不僅完整考量實際使用可能發生的危險,並會進行特殊的測試要求,例如震動、衝擊、擠壓、翻轉和水浸測試等,再加上軟硬體的功能性安全評估。

Martinez表示:「Gogoro 智慧電池取得UL 認證,證明Gogoro 製造的產品已達到世界級的安全水準,其將減少消費者對於電動機車電池安全的疑慮,更有助於Gogoro 邁向國際。」

Gogoro 執行長暨共同創辦人陸學森對此回應:「目前Gogoro 有超過8,000 位車主,每日平均創造近2,500 人次的電池交換,智慧電池在今日得到世界安全權威UL 認證,除了代表業界給予我們高標準的肯定外,也象徵Gogoro 對消費者安全承諾的實踐。」

除了頒發認證給Gogoro之外,UL期待未來在能源與電動機車服務方面,包括電動車、電動機車產品與電池、能源系統標準的開發,以及歐洲電動車、電動機車及儲能系統之標準研發方面與Gogoro 有更多深度探討與交流;Gogoro 於未來亦將尋求參與UL STP 標準技術小組的機會,提供產業觀點,以更廣闊的國際視野,共同守護消費者安全。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務