摘要:在進行一些公司內(nèi)部系統(tǒng)開發(fā)中,經(jīng)常會需要對接公司內(nèi)部統(tǒng)一的權(quán)限管理系統(tǒng)進行權(quán)限角色驗證等等。在實際開發(fā)過程中可以借助的實現(xiàn)權(quán)限驗證功能。
在進行一些公司內(nèi)部系統(tǒng)開發(fā)中,經(jīng)常會需要對接公司內(nèi)部統(tǒng)一的權(quán)限管理系統(tǒng)進行權(quán)限角色驗證等等。在實際開發(fā)過程中可以借助Spring的Session Repository實現(xiàn)權(quán)限驗證功能。
實現(xiàn)步驟如下:
一、添加自定義Session注解EnableUserHttpSession
package com.web.common.session; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; /** * 用戶Session * */ @Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @Target({java.lang.annotation.ElementType.TYPE}) @Documented @Import(UserHttpSessionConfiguration.class) @Configuration public @interface EnableUserHttpSession { /** * session 生效最大時間 * * @return */ int maxInactiveIntervalInSeconds() default 1800; }
二、添加自定義Session Configuration配置UserHttpSessionConfiguration
package com.web.common.session; import java.util.Map; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportAware; import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.type.AnnotationMetadata; import org.springframework.session.config.annotation.web.http.SpringHttpSessionConfiguration; import com.pingan.manpan.user.service.AuthService; /** * Session配置 */ @Configuration public class UserHttpSessionConfiguration extends SpringHttpSessionConfiguration implements ImportAware { //session 最大生存時間 private Integer maxInactiveIntervalInSeconds = 1800; // @Bean配置UserSessionRepository @Bean public UserSessionRepository sessionRepository(AuthService authService) { UserSessionRepository repository = new UserSessionRepository(authService); repository.setDefaultMaxInactiveInterval(this.maxInactiveIntervalInSeconds); return repository; } /* * ImportAware 在注解解析完成后調(diào)用 setImportMetadata 注解獲取導(dǎo)入 *(@Configuration)配置的注解的元數(shù)據(jù) */ @Override public void setImportMetadata(AnnotationMetadata importMetadata) { MapenableAttrMap = importMetadata.getAnnotationAttributes(EnableHaofangUserHttpSession.class.getName()); AnnotationAttributes enableAttrs = AnnotationAttributes.fromMap(enableAttrMap); this.maxInactiveIntervalInSeconds = enableAttrs.getNumber("maxInactiveIntervalInSeconds"); } }
三、自定義Session Repository:UserSessionRepository
package com.web.common.session; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.session.ExpiringSession; import org.springframework.session.SessionRepository; import com.user.dto.VisitorDTO; import com.user.service.AuthService; import com.web.common.constant.WebConstants; import com.web.common.handler.WebExceptionHandler; /** * 用戶session獲取 * */ public class UserSessionRepository implements SessionRepository{ static Logger LOG = LoggerFactory.getLogger(UserSessionRepository.class); /** * 生效時間 */ private Integer defaultMaxInactiveInterval; /** * 權(quán)限系統(tǒng)訪問服務(wù)類 */ private AuthService authService; /** * 構(gòu)造方法 * * @param authService */ public UserSessionRepository(AuthService authService) { super(); this.authService = authService; } /** * 設(shè)置最大生效時間 * * @param defaultMaxInactiveInterval */ public void setDefaultMaxInactiveInterval(int defaultMaxInactiveInterval) { this.defaultMaxInactiveInterval = defaultMaxInactiveInterval; } @Override public UserSession createSession() { UserSession UserSession = new UserSession(); UserSession.setNew(true); return UserSession; } @Override public void save(UserSession session) { if (session.isNew()) { String preToken = (String) session.getAttribute(WebConstants.PRE_TOKEN_KEY); LOG.info("session save,pretoken:{}",preToken); VisitorDTO visitor = authService.getLoginInfoByPreToken(preToken); if (visitor != null) { session.setToken(visitor.getToken()); session.setNew(false); } } } @Override public UserSession getSession(String id) { UserSession session = new UserSession(); // 判斷id是否有效 VisitorDTO visitor = authService.getLoginInfoByToken(id); if ((visitor == null)) { session.setToken(""); session.setNew(true); return session; } session.setToken(id); session.setAttribute("visitor", visitor); session.setNew(false); return session; } @Override public void delete(String id) { // 用戶登出 if (StringUtils.isNotBlank(id)) { authService.logout(id); } } /** * 封裝相關(guān)session */ final class UserSession implements ExpiringSession { private Map attributeMap = new HashMap<>(); private String token; private boolean isNew = false; public UserSession() { } public void setNew(boolean aNew) { isNew = aNew; } public boolean isNew() { return isNew; } public void setToken(String token) { this.token = token; } @Override public String getId() { return this.token; } @Override public Set getAttributeNames() { return attributeMap.keySet(); } @Override public void setAttribute(String attributeName, Object attributeValue) { attributeMap.put(attributeName, attributeValue); } @Override public void removeAttribute(String attributeName) { attributeMap.remove(attributeName); } /* * (non-Javadoc) * * @see org.springframework.session.Session#getAttribute(java.lang.String) */ @Override public Object getAttribute(String attributeName) { return attributeMap.get(attributeName); } /* * (non-Javadoc) * * @see org.springframework.session.ExpiringSession#getCreationTime() */ @Override public long getCreationTime() { // TODO Auto-generated method stub return 0; } /* * (non-Javadoc) * * @see org.springframework.session.ExpiringSession#setLastAccessedTime(long) */ @Override public void setLastAccessedTime(long lastAccessedTime) { // TODO Auto-generated method stub } /* * (non-Javadoc) * * @see org.springframework.session.ExpiringSession#getLastAccessedTime() */ @Override public long getLastAccessedTime() { // TODO Auto-generated method stub return 0; } /* * (non-Javadoc) * * @see org.springframework.session.ExpiringSession#setMaxInactiveIntervalInSeconds(int) */ @Override public void setMaxInactiveIntervalInSeconds(int interval) { // TODO Auto-generated method stub } /* * (non-Javadoc) * * @see org.springframework.session.ExpiringSession#getMaxInactiveIntervalInSeconds() */ @Override public int getMaxInactiveIntervalInSeconds() { // TODO Auto-generated method stub return 0; } /* * (non-Javadoc) * * @see org.springframework.session.ExpiringSession#isExpired() */ @Override public boolean isExpired() { // TODO Auto-generated method stub return false; } } }
四、在Spring WEB配置中啟用Spring Session
package com.pingan.manpan.web.common.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.session.web.http.SessionRepositoryFilter; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import com.web.common.interceptor.AuthorizationInterceptor; /** * WEB相關(guān)配置 * */ @Configuration public class WebConfiguration extends WebMvcConfigurationSupport { @Autowired private AuthorizationInterceptor authorizationInterceptor; @Autowired private SessionRepositoryFilter sessionRepositoryFilter; /** * 登陸權(quán)限驗證攔截器 * * @return */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(authorizationInterceptor).addPathPatterns(WebConstants.BASE_API_PATH + "/**"); } /** * session wrapper對應(yīng)Filter注冊啟用Spring Session * * @return */ @Bean public FilterRegistrationBean sessionRepositoryFilterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(sessionRepositoryFilter); filterRegistrationBean.addUrlPatterns(WebConstants.BASE_API_PATH + "/*"); return filterRegistrationBean; } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/69418.html
摘要:暑假的時候在學(xué)習(xí)了并成功運用到了項目中。這是提供的一個安全權(quán)限控制框架,可以根據(jù)使用者的需要定制相關(guān)的角色身份和身份所具有的權(quán)限,完成黑名單操作攔截?zé)o權(quán)限的操作。用戶通過登陸操作獲得我們返回的并保存在本地。 暑假的時候在學(xué)習(xí)了 Spring Security 并成功運用到了項目中。 在實踐中摸索出了一套結(jié)合 json + jwt(json web token) + Spring Boo...
摘要:暑假的時候在學(xué)習(xí)了并成功運用到了項目中。這是提供的一個安全權(quán)限控制框架,可以根據(jù)使用者的需要定制相關(guān)的角色身份和身份所具有的權(quán)限,完成黑名單操作攔截?zé)o權(quán)限的操作。用戶通過登陸操作獲得我們返回的并保存在本地。 暑假的時候在學(xué)習(xí)了 Spring Security 并成功運用到了項目中。 在實踐中摸索出了一套結(jié)合 json + jwt(json web token) + Spring Boo...
摘要:寫在前面在一款應(yīng)用的整個生命周期,我們都會談及該應(yīng)用的數(shù)據(jù)安全問題。用戶的合法性與數(shù)據(jù)的可見性是數(shù)據(jù)安全中非常重要的一部分。 寫在前面 在一款應(yīng)用的整個生命周期,我們都會談及該應(yīng)用的數(shù)據(jù)安全問題。用戶的合法性與數(shù)據(jù)的可見性是數(shù)據(jù)安全中非常重要的一部分。但是,一方面,不同的應(yīng)用對于數(shù)據(jù)的合法性和可見性要求的維度與粒度都有所區(qū)別;另一方面,以當前微服務(wù)、多服務(wù)的架構(gòu)方式,如何共享Sessi...
摘要:框架具有輕便,開源的優(yōu)點,所以本譯見構(gòu)建用戶管理微服務(wù)五使用令牌和來實現(xiàn)身份驗證往期譯見系列文章在賬號分享中持續(xù)連載,敬請查看在往期譯見系列的文章中,我們已經(jīng)建立了業(yè)務(wù)邏輯數(shù)據(jù)訪問層和前端控制器但是忽略了對身份進行驗證。 重拾后端之Spring Boot(四):使用JWT和Spring Security保護REST API 重拾后端之Spring Boot(一):REST API的搭建...
摘要:小程序官方流程圖如下,官方地址如果此圖理解不清楚的地方也可參看我的博客本文是對接微信小程序自定義登錄的一個完整例子實現(xiàn),技術(shù)棧為。調(diào)用微信接口獲取和根據(jù)和自定義登陸態(tài)返回自定義登陸態(tài)給小程序端。 小程序官方流程圖如下,官方地址 : https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login....
閱讀 2229·2019-08-30 10:51
閱讀 785·2019-08-30 10:50
閱讀 1463·2019-08-30 10:49
閱讀 3130·2019-08-26 13:55
閱讀 1591·2019-08-26 11:39
閱讀 3412·2019-08-26 11:34
閱讀 1937·2019-08-23 18:30
閱讀 3381·2019-08-23 18:22