springboot中@component注解的使用實(shí)例
@component注解的使用
配置響應(yīng)頭的內(nèi)容。
方式一
直接在攔截器里配置響應(yīng)頭內(nèi)容。
/** ?* 攔截器--用戶身份確認(rèn)。 ?*/ public class RestInterceptor implements HandlerInterceptor {?? ? ?? ?private static final Logger log = LoggerFactory.getLogger(RestInterceptor.class); ?? ?private static final String tokenHeader = "Authorization"; ? ?? ?/**? ? ? ? ? ?* ?返回值:true表示繼續(xù)流程(如調(diào)用下一個(gè)攔截器或處理器);false表示流程中斷(如登錄檢查失?。?,不會(huì)繼續(xù)調(diào)用其他的攔截器或處理器,此時(shí)我們需要通過(guò)response來(lái)產(chǎn)生響應(yīng);? ?? ? */ ?? ?public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { ?? ??? ?log.info("攔截請(qǐng)求"); ?? ??? ?//響應(yīng)頭 ?? ??? ?response.setHeader("Access-Control-Allow-Origin", "*"); ?? ??? ?response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type,authorization"); ?? ??? ?response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS"); ?? ??? ? ?? ??? ?if(request.getMethod().equals("OPTIONS")){ ?? ??? ??? ?response.setStatus(204); ?? ??? ??? ?return true; ?? ??? ?}?? ??? ? ?? ??? ?log.info("調(diào)用接口:method=" +request.getParameter("method")+",params="+JSON.toJSONString(request.getParameterMap())); ?? ??? ? //?? ??? ?HandlerMethod handlerMethod = (HandlerMethod)handler; //?? ??? ?RequestAuth requestAuth = handlerMethod.getMethodAnnotation(RequestAuth.class); //?? ??? ?if(requestAuth!=null && requestAuth.auth()==false){ //非驗(yàn)證API? //?? ??? ??? ?return true;//跳過(guò)驗(yàn)證 //?? ??? ?} ?? ??? ?//驗(yàn)證 //?? ??? ?String token = request.getHeader(tokenHeader); //?? ??? ?if(token == null || token.equals("")) { //?? ??? ??? ?log.info("沒(méi)有找到token"); //?? ??? ??? ?throw new BusinessException(ResMsg.CODE_TOKEN_NOTFOUND, "沒(méi)有找到token"); //?? ??? ?} else { //?? ??? ??? ?JWSObject jwsObject = JWSObject.parse(token); //?? ??? ??? ?Payload payload = jwsObject.getPayload(); //?? ??? ??? ?JSONObject obj = payload.toJSONObject(); ?? ??? ??? ? //?? ??? ??? ?String roleNames = String.valueOf(obj.get("roleNames")); //?? ??? ??? ?Authentication auth = new Authentication(); //?? ??? ??? ?if(obj.containsKey("platformId")) { //?? ??? ??? ??? ?Long platformId = Long.valueOf(String.valueOf(obj.get("platformId"))); //?? ??? ??? ??? ?auth.setPlatformId(platformId); //?? ??? ??? ?} //?? ??? ??? ?if(obj.containsKey("userid")) { //?? ??? ??? ??? ?Long userId = Long.valueOf(String.valueOf(obj.get("userid"))); //?? ??? ??? ??? ?auth.setUserId(userId); //?? ??? ??? ?} //?? ??? ??? ?if(obj.containsKey("orgId")) { //?? ??? ??? ??? ?Long orgId = Long.valueOf(String.valueOf(obj.get("orgId"))); //?? ??? ??? ??? ?auth.setOrgId(orgId); //?? ??? ??? ?} //?? ??? ??? ?if(obj.containsKey("orgid")) {//為兼容老版本的接口 //?? ??? ??? ??? ?String orgid = String.valueOf(obj.get("orgid")); //?? ??? ??? ??? ?orgid = orgid.replace(",", ""); //?? ??? ??? ??? ?Long orgId = Long.valueOf(orgid); //?? ??? ??? ??? ?auth.setOrgId(orgId); //?? ??? ??? ?} //?? ??? ??? ?auth.setRoleNames(roleNames); //?? ??? ??? ?SecurityContext.setContext(auth); //?? ??? ??? ?JwtUtil.verify(jwsObject); //?? ??? ?} ?? ??? ?return true; ?? ?} ? ?? ?public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ?? ??? ??? ?ModelAndView modelAndView) throws Exception { ?? ??? ?//log.info("處理中"); ?? ?} ? ?? ?public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) ?? ??? ??? ?throws Exception { ?? ??? ?if(ex != null) { ?? ??? ??? ?log.error("接口處理異常:"+ex); ?? ??? ??? ?throw ex; ?? ??? ?} ?? ?} }
方式二
使用@component注解,將普通JavaBean實(shí)例化到spring容器中。
public class RestInterceptor implements HandlerInterceptor {?? ? ?? ?private static final Logger log = LoggerFactory.getLogger(RestInterceptor.class); ?? ?private static final String tokenHeader = "Authorization"; ? ?? ?/**? ? ? ? ? ?* 返回值:true表示繼續(xù)流程(如調(diào)用下一個(gè)攔截器或處理器);false表示流程中斷(如登錄檢查失?。?,不會(huì)繼續(xù)調(diào)用其他的攔截器或處理器,此時(shí)我們需要通過(guò)response來(lái)產(chǎn)生響應(yīng);? ?? ? */ ?? ?public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { ?? ??? ?log.info("攔截請(qǐng)求"); ?? ??? ? ? ?? ??? ?if(request.getMethod().equals("OPTIONS")){ ?? ??? ??? ?response.setStatus(204); ?? ??? ??? ?return true; ?? ??? ?}?? ??? ? ?? ??? ?log.info("調(diào)用接口:method=" +request.getParameter("method")+",params="+JSON.toJSONString(request.getParameterMap()));?? ??? ?? ?? ??? ?return true; ?? ?} ? ?? ?public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ?? ??? ??? ?ModelAndView modelAndView) throws Exception { ?? ??? ?//log.info("處理中"); ?? ?} ? ?? ?public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) ?? ??? ??? ?throws Exception { ?? ??? ?if(ex != null) { ?? ??? ??? ?log.error("接口處理異常:"+ex); ?? ??? ??? ?throw ex; ?? ??? ?} ?? ?} }
定義 SimpleCORSFilter.java 類, 使用@component注解
@Component public class SimpleCORSFilter implements Filter { ?? ?public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { ? ? ? ? HttpServletResponse response = (HttpServletResponse) res; ? ? ? ? response.setHeader("Access-Control-Allow-Origin", "*"); ? ? ? ? response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); ? ? ? ? response.setHeader("Access-Control-Max-Age", "3600"); ? ? ? ? response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type,authorization"); ? ? ? ? chain.doFilter(req, res); ? ? } ? ? ? public void init(FilterConfig filterConfig) {}? ? ? public void destroy() {}? ?? }
兩種方式都可以完成響應(yīng)。
@component注解有什么作用
用一句話概括
被@Component注解標(biāo)識(shí)的類,會(huì)被納入Spring容器中統(tǒng)一管理,好處是什么?一句話概括:你不用自己new了!
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java讀取properties配置文件時(shí),出現(xiàn)中文亂碼的解決方法
下面小編就為大家?guī)?lái)一篇Java讀取properties配置文件時(shí),出現(xiàn)中文亂碼的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11Java多線程并發(fā)編程(互斥鎖Reentrant Lock)
這篇文章主要介紹了ReentrantLock 互斥鎖,在同一時(shí)間只能被一個(gè)線程所占有,在被持有后并未釋放之前,其他線程若想獲得該鎖只能等待或放棄,需要的朋友可以參考下2017-05-05解決Callable的對(duì)象中,用@Autowired注入別的對(duì)象失敗問(wèn)題
這篇文章主要介紹了解決Callable的對(duì)象中,用@Autowired注入別的對(duì)象失敗問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07SpringBoot整合Elasticsearch游標(biāo)查詢的示例代碼(scroll)
這篇文章主要介紹了SpringBoot整合Elasticsearch游標(biāo)查詢(scroll),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Java中調(diào)用SQL Server存儲(chǔ)過(guò)程詳解
這篇文章主要介紹了Java中調(diào)用SQL Server存儲(chǔ)過(guò)程詳解,本文講解了使用不帶參數(shù)的存儲(chǔ)過(guò)程、使用帶有輸入?yún)?shù)的存儲(chǔ)過(guò)程、使用帶有輸出參數(shù)的存儲(chǔ)過(guò)程、使用帶有返回狀態(tài)的存儲(chǔ)過(guò)程、使用帶有更新計(jì)數(shù)的存儲(chǔ)過(guò)程等操作實(shí)例,需要的朋友可以參考下2015-01-01IntelliJ IDEA右鍵文件夾沒(méi)有Java Class文件的原因及解決方法
這篇文章主要介紹了IntelliJ IDEA右鍵文件夾沒(méi)有Java Class文件的原因及解決方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09DynamicDataSource怎樣解決多數(shù)據(jù)源的事務(wù)問(wèn)題
這篇文章主要介紹了DynamicDataSource怎樣解決多數(shù)據(jù)源的事務(wù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07