package Ġno . sk at te et aten . aur ora . spro cket . security Ċ Ċ import Ġno . sk at te et aten . aur ora . io . Caching Request Wrapper Ċ import Ġorg . apache . commons . codec . digest . H mac Algorithms Ċ import Ġorg . apache . commons . codec . digest . H mac Utils Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . security . config . annotation . web . builders . Http Security Ċ import Ġorg . springframework . security . config . annotation . web . configuration . Enable Web Security Ċ import Ġorg . springframework . security . config . annotation . web . configuration . Web Security Configurer Adapter Ċ import Ġorg . springframework . security . core . authority . Simple Granted Authority Ċ import Ġorg . springframework . security . core . context . SecurityContext Holder Ċ import Ġorg . springframework . security . web . authentication . Username Password Authentication Filter Ċ import Ġorg . springframework . security . web . authentication . pre auth . Pre Authenticated Authentication Token Ċ import Ġorg . springframework . web . filter . Once Per Request Filter Ċ import Ġjavax . servlet . FilterChain Ċ import Ġjavax . servlet . http . HttpServletRequest Ċ import Ġjavax . servlet . http . HttpServletResponse Ċ Ċ val ĠN EX US _ SECURITY _ HEADER Ġ= Ġ" x - nexus - webhook - signature " Ċ val ĠN EX US _ AUTH ORITY Ġ= Ġ" N EX US " Ċ Ċ // Ġhttps :// github . com / kp av lov / spring - hmac - rest / blob / master / src / main / java / com / github / kp av lov / rest ws / server / hmac / H mac Authentication Filter . java Ċ @ Enable Web Security Ċ class ĠWeb Security Config ( ĊĠĠĠ Ġ@ Value ("\ ${ spro cket . nexus . secret : 1 2 3 4 5 6 }") Ġval Ġsecret Key : ĠString Ċ ) Ġ: ĠWeb Security Configurer Adapter () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġconfigure ( http : ĠHttp Security ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġhttp . csrf (). disable () ĊĊĠĠĠĠĠĠĠ Ġhttp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Filter Before ( N exus Webhook Signature Filter ( secret Key ), ĠUsername Password Authentication Filter :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. authorize Requests () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ant Matchers ("/ nexus /** "). has Authority ( N EX US _ AUTH ORITY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. any Request (). permit All () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠN exus Webhook Signature Filter ( private Ġval Ġsecret Key : ĠString ) Ġ: ĠOnce Per Request Filter () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġdo Filter Internal ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠHttpServletRequest , ĊĠĠĠĠĠĠĠ Ġresponse : ĠHttpServletResponse , ĊĠĠĠĠĠĠĠ Ġfilter Chain : ĠFilter Chain ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġrequest . getHeader ( N EX US _ SECURITY _ HEADER ) ĊĠĠĠĠĠĠĠ Ġif Ġ( signature Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlogger . debug (" signature Ġmissing , Ġwe Ġdo Ġnot Ġrun Ġthis Ġfilter Ġ${ request . request URI }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Chain . do Filter ( request , Ġresponse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrequest Wrapper Ġ= ĠC aching Request Wrapper ( request ) ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġrequest Wrapper . content As ByteArray ĊĊĠĠĠĠĠĠĠ Ġval Ġhmac Utils Ġ= ĠH mac Utils ( H mac Algorithms . HMAC _ SHA _ 1 , Ġsecret Key ) ĊĠĠĠĠĠĠĠ Ġval Ġhmac Ġ= Ġhmac Utils . hmac Hex ( body ) ĊĠĠĠĠĠĠĠ Ġif Ġ( signature Ġ== Ġhmac ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthentication Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPre Authenticated Authentication Token (" nexus ", Ġsignature , ĠlistOf ( Simple Granted Authority ( N EX US _ AUTH ORITY ))) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSecurity Context Holder . getContext (). authentication Ġ= Ġauthentication ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġsignature Ġdoes Ġnot Ġmatch Ġwe Ġdo Ġnot Ġhave Ġa Ġvalid Ġuser . ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Chain . do Filter ( request Wrapper , Ġresponse ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSecurity Context Holder . clear Context () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ