From 39f46604daffde4c880c30126dfd6371a0475b52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=9D=E5=AF=86=E6=B8=B8=E6=88=8F?= Date: Sun, 23 Jul 2017 22:56:36 +0800 Subject: [PATCH] no commit message --- .../config/web/ApiRequestMatchingFilter.java | 57 +++++++ .../beimi/config/web/UKWebAppConfigurer.java | 21 +++ .../beimi/config/web/WebSecurityConfig.java | 9 +- .../java/com/beimi/core/BMDataContext.java | 1 + src/main/java/com/beimi/util/UKView.java | 28 ++++ .../java/com/beimi/util/cache/CacheBean.java | 59 +++++++ .../com/beimi/util/cache/CacheHelper.java | 31 ++++ .../com/beimi/util/cache/CacheInstance.java | 31 ++++ .../cache/hazelcast/HazlcastCacheHelper.java | 44 +++++ .../cache/hazelcast/impl/ApiUserCache.java | 93 +++++++++++ .../util/cache/hazelcast/impl/MultiCache.java | 94 +++++++++++ .../cache/hazelcast/impl/OnlineCache.java | 93 +++++++++++ .../cache/hazelcast/impl/SystemCache.java | 93 +++++++++++ .../java/com/beimi/web/handler/Handler.java | 150 ++++++++++++++++++ .../web/handler/api/ApiLoginController.java | 66 ++++++++ .../handler/api/rest/ApiUserController.java | 34 ++++ .../interceptor/CrossInterceptorHandler.java | 30 ++++ src/main/resources/application.properties | 2 +- src/main/resources/config/hazelcast.xml | 20 ++- 19 files changed, 952 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/beimi/config/web/ApiRequestMatchingFilter.java create mode 100644 src/main/java/com/beimi/config/web/UKWebAppConfigurer.java create mode 100644 src/main/java/com/beimi/util/UKView.java create mode 100644 src/main/java/com/beimi/util/cache/CacheBean.java create mode 100644 src/main/java/com/beimi/util/cache/CacheHelper.java create mode 100644 src/main/java/com/beimi/util/cache/CacheInstance.java create mode 100644 src/main/java/com/beimi/util/cache/hazelcast/HazlcastCacheHelper.java create mode 100644 src/main/java/com/beimi/util/cache/hazelcast/impl/ApiUserCache.java create mode 100644 src/main/java/com/beimi/util/cache/hazelcast/impl/MultiCache.java create mode 100644 src/main/java/com/beimi/util/cache/hazelcast/impl/OnlineCache.java create mode 100644 src/main/java/com/beimi/util/cache/hazelcast/impl/SystemCache.java create mode 100644 src/main/java/com/beimi/web/handler/Handler.java create mode 100644 src/main/java/com/beimi/web/handler/api/ApiLoginController.java create mode 100644 src/main/java/com/beimi/web/handler/api/rest/ApiUserController.java create mode 100644 src/main/java/com/beimi/web/handler/interceptor/CrossInterceptorHandler.java diff --git a/src/main/java/com/beimi/config/web/ApiRequestMatchingFilter.java b/src/main/java/com/beimi/config/web/ApiRequestMatchingFilter.java new file mode 100644 index 0000000..c2dc732 --- /dev/null +++ b/src/main/java/com/beimi/config/web/ApiRequestMatchingFilter.java @@ -0,0 +1,57 @@ +package com.beimi.config.web; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.security.web.util.matcher.RequestMatcher; + +import com.beimi.core.BMDataContext; +import com.beimi.util.cache.CacheHelper; + +public class ApiRequestMatchingFilter implements Filter { + private RequestMatcher[] ignoredRequests; + + public ApiRequestMatchingFilter(RequestMatcher... matcher) { + this.ignoredRequests = matcher; + } + + public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { + HttpServletRequest request = (HttpServletRequest) req; + boolean matchAnyRoles = false ; + for(RequestMatcher anyRequest : ignoredRequests ){ + if(anyRequest.matches(request)){ + matchAnyRoles = true ; + } + } + String authorization = request.getHeader("authorization") ; + if(matchAnyRoles){ + if(!StringUtils.isBlank(authorization) && CacheHelper.getApiUserCacheBean().getCacheObject(authorization, BMDataContext.SYSTEM_ORGI) != null){ + chain.doFilter(req,resp); + }else{ + HttpServletResponse response = (HttpServletResponse) resp ; + response.sendRedirect("/tokens"); + } + }else{ + chain.doFilter(req,resp); + } + } + + @Override + public void destroy() { + + } + + @Override + public void init(FilterConfig arg0) throws ServletException { + + } +} \ No newline at end of file diff --git a/src/main/java/com/beimi/config/web/UKWebAppConfigurer.java b/src/main/java/com/beimi/config/web/UKWebAppConfigurer.java new file mode 100644 index 0000000..a654880 --- /dev/null +++ b/src/main/java/com/beimi/config/web/UKWebAppConfigurer.java @@ -0,0 +1,21 @@ +package com.beimi.config.web; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +import com.beimi.web.handler.interceptor.CrossInterceptorHandler; + +@Configuration +public class UKWebAppConfigurer + extends WebMvcConfigurerAdapter { + + @Override + public void addInterceptors(InterceptorRegistry registry) { + // 多个拦截器组成一个拦截器链 + // addPathPatterns 用于添加拦截规则 + // excludePathPatterns 用户排除拦截 + registry.addInterceptor(new CrossInterceptorHandler()).addPathPatterns("/**"); + super.addInterceptors(registry); + } +} \ No newline at end of file diff --git a/src/main/java/com/beimi/config/web/WebSecurityConfig.java b/src/main/java/com/beimi/config/web/WebSecurityConfig.java index 088b0e0..5e1cbd5 100644 --- a/src/main/java/com/beimi/config/web/WebSecurityConfig.java +++ b/src/main/java/com/beimi/config/web/WebSecurityConfig.java @@ -30,7 +30,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { http.addFilterAfter(tokenInfoTokenFilterSecurityInterceptor() , BasicAuthenticationFilter.class) .antMatcher("*/*").authorizeRequests() .anyRequest().permitAll() - .and().addFilterAfter(csrfHeaderFilter(), BasicAuthenticationFilter.class); + .and().addFilterAfter(csrfHeaderFilter(), BasicAuthenticationFilter.class) + .addFilterAfter(apiTokenFilterSecurityInterceptor(), BasicAuthenticationFilter.class); } @Bean public Filter tokenInfoTokenFilterSecurityInterceptor() throws Exception @@ -49,6 +50,12 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { return new DelegateRequestMatchingFilter(autconfig , configprops , beans , dump , env , health , info , mappings , metrics , trace); } + @Bean + public Filter apiTokenFilterSecurityInterceptor() throws Exception + { + return new ApiRequestMatchingFilter(new AntPathRequestMatcher("/api/**")); + } + private Filter csrfHeaderFilter() { return new OncePerRequestFilter() { diff --git a/src/main/java/com/beimi/core/BMDataContext.java b/src/main/java/com/beimi/core/BMDataContext.java index 760d5cf..9bd69f5 100644 --- a/src/main/java/com/beimi/core/BMDataContext.java +++ b/src/main/java/com/beimi/core/BMDataContext.java @@ -9,6 +9,7 @@ public class BMDataContext { public static final String GUEST_USER_ID_CODE = "BEIMIGUESTUSEKEY" ; public static final String SERVICE_QUENE_NULL_STR = "service_quene_null" ; public static final String DEFAULT_TYPE = "default" ; //默认分类代码 + public static String SYSTEM_ORGI = "beimi" ; private static int WebIMPort = 8081 ; diff --git a/src/main/java/com/beimi/util/UKView.java b/src/main/java/com/beimi/util/UKView.java new file mode 100644 index 0000000..75c36c9 --- /dev/null +++ b/src/main/java/com/beimi/util/UKView.java @@ -0,0 +1,28 @@ +package com.beimi.util; + +public class UKView { + private String page ; + private String templet; + + public UKView(String templet , String page){ + this.templet = templet ; + this.page = page ; + } + + public UKView(String page){ + this.page = page ; + } + + public String getPage() { + return page; + } + public void setPage(String page) { + this.page = page; + } + public String getTemplet() { + return templet; + } + public void setTemplet(String templet) { + this.templet = templet; + } +} diff --git a/src/main/java/com/beimi/util/cache/CacheBean.java b/src/main/java/com/beimi/util/cache/CacheBean.java new file mode 100644 index 0000000..4ce5e20 --- /dev/null +++ b/src/main/java/com/beimi/util/cache/CacheBean.java @@ -0,0 +1,59 @@ +package com.beimi.util.cache; + +import java.util.Collection; +import java.util.concurrent.locks.Lock; + +public interface CacheBean { + /** + * + */ + public void put(String key , Object value , String orgi) ; + + /** + * + */ + public void clear(String orgi); + + + public Object delete(String key , String orgi) ; + + public void update(String key , String orgi , Object object) ; + + /** + * + * @param key + * @param orgi + * @return + */ + public Object getCacheObject(String key, String orgi) ; + + + /** + * + * @param key + * @param orgi + * @return + */ + public Object getCacheObject(String key, String orgi,Object defaultValue) ; + + /** + * 获取所有缓存对象 + * @param orgi + * @return + */ + public Collection getAllCacheObject(String orgi) ; + + + public CacheBean getCacheInstance(String cacheName); + + public Object getCache(); + + public Lock getLock(String lock, String orgi); + + public long getSize(); + + public long getAtomicLong(String cacheName) ; + + public void setAtomicLong(String cacheName , long start) ; //初始化 发号器 + +} diff --git a/src/main/java/com/beimi/util/cache/CacheHelper.java b/src/main/java/com/beimi/util/cache/CacheHelper.java new file mode 100644 index 0000000..63cd617 --- /dev/null +++ b/src/main/java/com/beimi/util/cache/CacheHelper.java @@ -0,0 +1,31 @@ +package com.beimi.util.cache; + +import com.beimi.util.cache.hazelcast.HazlcastCacheHelper; + +public class CacheHelper { + private static CacheHelper instance = new CacheHelper(); + + /** + * 获取缓存实例 + */ + public static CacheHelper getInstance(){ + return instance ; + } + private static CacheInstance cacheInstance = new HazlcastCacheHelper(); + + public static CacheBean getOnlineUserCacheBean() { + return cacheInstance!=null ? cacheInstance.getOnlineCacheBean() : null; + } + public static CacheBean getSystemCacheBean() { + return cacheInstance!=null ? cacheInstance.getSystemCacheBean() : null ; + } + + public static CacheBean getIMRCacheBean() { + return cacheInstance!=null ? cacheInstance.getIMRCacheBean() : null ; + } + + public static CacheBean getApiUserCacheBean() { + return cacheInstance!=null ? cacheInstance.getApiUserCacheBean() : null ; + } + +} diff --git a/src/main/java/com/beimi/util/cache/CacheInstance.java b/src/main/java/com/beimi/util/cache/CacheInstance.java new file mode 100644 index 0000000..c586ff3 --- /dev/null +++ b/src/main/java/com/beimi/util/cache/CacheInstance.java @@ -0,0 +1,31 @@ +package com.beimi.util.cache; + + +public interface CacheInstance { + + /** + * 在线用户 + * @return + */ + public CacheBean getOnlineCacheBean(); + + /** + * 系统缓存 + * @return + */ + public CacheBean getSystemCacheBean(); + + + /** + * IMR指令 + * @return + */ + public CacheBean getIMRCacheBean(); + + /** + * IMR指令 + * @return + */ + public CacheBean getApiUserCacheBean(); + +} \ No newline at end of file diff --git a/src/main/java/com/beimi/util/cache/hazelcast/HazlcastCacheHelper.java b/src/main/java/com/beimi/util/cache/hazelcast/HazlcastCacheHelper.java new file mode 100644 index 0000000..a865a1e --- /dev/null +++ b/src/main/java/com/beimi/util/cache/hazelcast/HazlcastCacheHelper.java @@ -0,0 +1,44 @@ +package com.beimi.util.cache.hazelcast; + +import com.beimi.core.BMDataContext; +import com.beimi.util.cache.CacheBean; +import com.beimi.util.cache.CacheInstance; +import com.beimi.util.cache.hazelcast.impl.ApiUserCache; +import com.beimi.util.cache.hazelcast.impl.MultiCache; +import com.beimi.util.cache.hazelcast.impl.OnlineCache; +import com.beimi.util.cache.hazelcast.impl.SystemCache; +/** + * Hazlcast缓存处理实例类 + * @author admin + * + */ +public class HazlcastCacheHelper implements CacheInstance{ + /** + * 服务类型枚举 + * @author admin + * + */ + public enum CacheServiceEnum{ + HAZLCAST_CLUSTER_AGENT_USER_CACHE, HAZLCAST_CLUSTER_AGENT_STATUS_CACHE, HAZLCAST_CLUSTER_QUENE_USER_CACHE,HAZLCAST_ONLINE_CACHE , HAZLCAST_CULUSTER_SYSTEM , HAZLCAST_IMR_CACHE , API_USER_CACHE; + public String toString(){ + return super.toString().toLowerCase(); + } + } + + @Override + public CacheBean getOnlineCacheBean() { + return BMDataContext.getContext().getBean(OnlineCache.class).getCacheInstance(CacheServiceEnum.HAZLCAST_ONLINE_CACHE.toString()) ; + } + @Override + public CacheBean getSystemCacheBean() { + return BMDataContext.getContext().getBean(SystemCache.class).getCacheInstance(CacheServiceEnum.HAZLCAST_CULUSTER_SYSTEM.toString()) ; + } + @Override + public CacheBean getIMRCacheBean() { + return BMDataContext.getContext().getBean(MultiCache.class).getCacheInstance(CacheServiceEnum.HAZLCAST_IMR_CACHE.toString()) ; + } + @Override + public CacheBean getApiUserCacheBean() { + return BMDataContext.getContext().getBean(ApiUserCache.class).getCacheInstance(CacheServiceEnum.API_USER_CACHE.toString()) ; + } +} diff --git a/src/main/java/com/beimi/util/cache/hazelcast/impl/ApiUserCache.java b/src/main/java/com/beimi/util/cache/hazelcast/impl/ApiUserCache.java new file mode 100644 index 0000000..881fcf1 --- /dev/null +++ b/src/main/java/com/beimi/util/cache/hazelcast/impl/ApiUserCache.java @@ -0,0 +1,93 @@ +package com.beimi.util.cache.hazelcast.impl; + +import java.util.Collection; +import java.util.concurrent.locks.Lock; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.beimi.util.cache.CacheBean; +import com.hazelcast.core.HazelcastInstance; + +@Service("api_user_cache") +public class ApiUserCache implements CacheBean{ + + @Autowired + public HazelcastInstance hazelcastInstance; + + private String cacheName ; + + public HazelcastInstance getInstance(){ + return hazelcastInstance ; + } + public CacheBean getCacheInstance(String cacheName){ + this.cacheName = cacheName ; + return this ; + } + + @Override + public void put(String key, Object value, String orgi) { + getInstance().getMap(getName()).put(key, value) ; + } + + @Override + public void clear(String orgi) { + getInstance().getMap(getName()).clear(); + } + + @Override + public Object delete(String key, String orgi) { + return getInstance().getMap(getName()).remove(key) ; + } + + @Override + public void update(String key, String orgi, Object value) { + getInstance().getMap(getName()).put(key, value); + } + + @Override + public Object getCacheObject(String key, String orgi) { + return getInstance().getMap(getName()).get(key); + } + + public String getName() { + return cacheName ; + } + +// @Override + public void service() throws Exception { + // TODO Auto-generated method stub + + } + + @Override + public Collection getAllCacheObject(String orgi) { + return getInstance().getMap(getName()).keySet(); + } + @Override + public Object getCacheObject(String key, String orgi, Object defaultValue) { + return getCacheObject(key, orgi); + } + @Override + public Object getCache() { + return getInstance().getMap(cacheName); + } + + @Override + public Lock getLock(String lock , String orgi) { + // TODO Auto-generated method stub + return getInstance().getLock(lock); + } + @Override + public long getSize() { + return getInstance().getMap(getName()).size(); + } + @Override + public long getAtomicLong(String cacheName) { + return getInstance().getAtomicLong(getName()).incrementAndGet(); + } + @Override + public void setAtomicLong(String cacheName, long start) { + getInstance().getAtomicLong(getName()).set(start); + } +} diff --git a/src/main/java/com/beimi/util/cache/hazelcast/impl/MultiCache.java b/src/main/java/com/beimi/util/cache/hazelcast/impl/MultiCache.java new file mode 100644 index 0000000..6b3c0c1 --- /dev/null +++ b/src/main/java/com/beimi/util/cache/hazelcast/impl/MultiCache.java @@ -0,0 +1,94 @@ +package com.beimi.util.cache.hazelcast.impl; + +import java.util.Collection; +import java.util.concurrent.locks.Lock; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.beimi.util.cache.CacheBean; +import com.hazelcast.core.HazelcastInstance; + +@Service("multi_cache") +public class MultiCache implements CacheBean{ + + @Autowired + public HazelcastInstance hazelcastInstance; + + private String cacheName ; + + public HazelcastInstance getInstance(){ + return hazelcastInstance ; + } + public CacheBean getCacheInstance(String cacheName){ + this.cacheName = cacheName ; + return this ; + } + + @Override + public void put(String key, Object value, String orgi) { + getInstance().getMultiMap(getName()).put(key, value) ; + } + + @Override + public void clear(String orgi) { + getInstance().getMultiMap(getName()).clear(); + } + + @Override + public Object delete(String key, String orgi) { + return getInstance().getMultiMap(getName()).remove(key) ; + } + + @Override + public void update(String key, String orgi, Object value) { + getInstance().getMultiMap(getName()).put(key, value); + } + + @Override + public Object getCacheObject(String key, String orgi) { + return getInstance().getMultiMap(getName()).get(key); + } + + public String getName() { + return cacheName ; + } + +// @Override + public void service() throws Exception { + // TODO Auto-generated method stub + + } + + @Override + public Collection getAllCacheObject(String orgi) { + return getInstance().getMultiMap(getName()).keySet(); + } + @Override + public Object getCacheObject(String key, String orgi, Object defaultValue) { + return getCacheObject(key, orgi); + + } + @Override + public Object getCache() { + return getInstance().getMultiMap(cacheName); + } + + @Override + public Lock getLock(String lock , String orgi) { + // TODO Auto-generated method stub + return getInstance().getLock(lock); + } + @Override + public long getSize() { + return getInstance().getMultiMap(getName()).size(); + } + @Override + public long getAtomicLong(String cacheName) { + return getInstance().getAtomicLong(getName()).incrementAndGet(); + } + @Override + public void setAtomicLong(String cacheName, long start) { + getInstance().getAtomicLong(getName()).set(start); + } +} diff --git a/src/main/java/com/beimi/util/cache/hazelcast/impl/OnlineCache.java b/src/main/java/com/beimi/util/cache/hazelcast/impl/OnlineCache.java new file mode 100644 index 0000000..7733b9c --- /dev/null +++ b/src/main/java/com/beimi/util/cache/hazelcast/impl/OnlineCache.java @@ -0,0 +1,93 @@ +package com.beimi.util.cache.hazelcast.impl; + +import java.util.Collection; +import java.util.concurrent.locks.Lock; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.beimi.util.cache.CacheBean; +import com.hazelcast.core.HazelcastInstance; + +@Service("online_cache") +public class OnlineCache implements CacheBean{ + + @Autowired + public HazelcastInstance hazelcastInstance; + + private String cacheName ; + + public HazelcastInstance getInstance(){ + return hazelcastInstance ; + } + public CacheBean getCacheInstance(String cacheName){ + this.cacheName = cacheName ; + return this ; + } + + @Override + public void put(String key, Object value, String orgi) { + getInstance().getMap(getName()).put(key, value) ; + } + + @Override + public void clear(String orgi) { + getInstance().getMap(getName()).clear(); + } + + @Override + public Object delete(String key, String orgi) { + return getInstance().getMap(getName()).remove(key) ; + } + + @Override + public void update(String key, String orgi, Object value) { + getInstance().getMap(getName()).put(key, value); + } + + @Override + public Object getCacheObject(String key, String orgi) { + return getInstance().getMap(getName()).get(key); + } + + public String getName() { + return cacheName ; + } + +// @Override + public void service() throws Exception { + // TODO Auto-generated method stub + + } + + @Override + public Collection getAllCacheObject(String orgi) { + return getInstance().getMap(getName()).keySet(); + } + @Override + public Object getCacheObject(String key, String orgi, Object defaultValue) { + return getCacheObject(key, orgi); + } + @Override + public Object getCache() { + return getInstance().getMap(cacheName); + } + + @Override + public Lock getLock(String lock , String orgi) { + // TODO Auto-generated method stub + return getInstance().getLock(lock); + } + @Override + public long getSize() { + return getInstance().getMap(getName()).size(); + } + @Override + public long getAtomicLong(String cacheName) { + return getInstance().getAtomicLong(getName()).incrementAndGet(); + } + @Override + public void setAtomicLong(String cacheName, long start) { + getInstance().getAtomicLong(getName()).set(start); + } +} diff --git a/src/main/java/com/beimi/util/cache/hazelcast/impl/SystemCache.java b/src/main/java/com/beimi/util/cache/hazelcast/impl/SystemCache.java new file mode 100644 index 0000000..ad6e16a --- /dev/null +++ b/src/main/java/com/beimi/util/cache/hazelcast/impl/SystemCache.java @@ -0,0 +1,93 @@ +package com.beimi.util.cache.hazelcast.impl; + +import java.util.Collection; +import java.util.concurrent.locks.Lock; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.beimi.util.cache.CacheBean; +import com.hazelcast.core.HazelcastInstance; + +@Service("system_cache") +public class SystemCache implements CacheBean{ + + @Autowired + public HazelcastInstance hazelcastInstance; + + private String cacheName ; + + public HazelcastInstance getInstance(){ + return hazelcastInstance ; + } + public CacheBean getCacheInstance(String cacheName){ + this.cacheName = cacheName ; + return this ; + } + + @Override + public void put(String key, Object value, String orgi) { + getInstance().getMap(getName()).put(key, value) ; + } + + @Override + public void clear(String orgi) { + getInstance().getMap(getName()).clear(); + } + + @Override + public Object delete(String key, String orgi) { + return getInstance().getMap(getName()).remove(key) ; + } + + @Override + public void update(String key, String orgi, Object value) { + getInstance().getMap(getName()).put(key, value); + } + + @Override + public Object getCacheObject(String key, String orgi) { + return getInstance().getMap(getName()).get(key); + } + + public String getName() { + return cacheName ; + } + +// @Override + public void service() throws Exception { + // TODO Auto-generated method stub + + } + + @Override + public Collection getAllCacheObject(String orgi) { + return getInstance().getMap(getName()).keySet(); + } + @Override + public Object getCacheObject(String key, String orgi, Object defaultValue) { + return getCacheObject(key, orgi); + } + @Override + public Object getCache() { + return getInstance().getMap(cacheName); + } + + @Override + public Lock getLock(String lock , String orgi) { + // TODO Auto-generated method stub + return getInstance().getLock(lock); + } + @Override + public long getSize() { + return getInstance().getMap(getName()).size(); + } + @Override + public long getAtomicLong(String cacheName) { + return getInstance().getAtomicLong(getName()).incrementAndGet(); + } + @Override + public void setAtomicLong(String cacheName, long start) { + getInstance().getAtomicLong(getName()).set(start); + } +} diff --git a/src/main/java/com/beimi/web/handler/Handler.java b/src/main/java/com/beimi/web/handler/Handler.java new file mode 100644 index 0000000..25400bd --- /dev/null +++ b/src/main/java/com/beimi/web/handler/Handler.java @@ -0,0 +1,150 @@ +package com.beimi.web.handler; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.lang.StringUtils; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.SessionAttributes; +import org.springframework.web.servlet.ModelAndView; + +import com.beimi.core.BMDataContext; +import com.beimi.util.UKTools; +import com.beimi.util.UKView; +import com.beimi.util.cache.CacheHelper; +import com.beimi.web.model.User; + + +@Controller +@SessionAttributes +public class Handler { + public final static int PAGE_SIZE_BG = 1 ; + public final static int PAGE_SIZE_TW = 20 ; + public final static int PAGE_SIZE_FV = 50 ; + public final static int PAGE_SIZE_HA = 100 ; + + public User getUser(HttpServletRequest request){ + User user = (User) request.getSession(true).getAttribute(BMDataContext.USER_SESSION_NAME) ; + if(user==null){ + String authorization = request.getHeader("authorization") ; + if(StringUtils.isBlank(authorization) && request.getCookies()!=null){ + for(Cookie cookie : request.getCookies()){ + if(cookie.getName().equals("authorization")){ + authorization = cookie.getValue() ; break ; + } + } + } + if(!StringUtils.isBlank(authorization)){ + user = (User) CacheHelper.getApiUserCacheBean().getCacheObject(authorization, BMDataContext.SYSTEM_ORGI) ; + } + if(user==null){ + user = new User(); + user.setId(UKTools.getContextID(request.getSession().getId())) ; + user.setUsername(BMDataContext.GUEST_USER+"_"+UKTools.genIDByKey(user.getId())) ; + user.setOrgi(BMDataContext.SYSTEM_ORGI); + user.setSessionid(user.getId()) ; + } + }else{ + user.setSessionid(user.getId()) ; + } + return user ; + } + + public User getIMUser(HttpServletRequest request , String sign){ + User user = (User) request.getSession(true).getAttribute(BMDataContext.IM_USER_SESSION_NAME) ; + if(user==null){ + user = new User(); + if(!StringUtils.isBlank(sign)){ + user.setId(sign) ; + }else{ + user.setId(UKTools.getContextID(request.getSession().getId())) ; + } + user.setUsername(BMDataContext.GUEST_USER+"_"+UKTools.genIDByKey(user.getId())) ; + user.setSessionid(user.getId()) ; + }else{ + user.setSessionid(UKTools.getContextID(request.getSession().getId())) ; + } + return user ; + } + + + public void setUser(HttpServletRequest request , User user){ + request.getSession(true).removeAttribute(BMDataContext.USER_SESSION_NAME) ; + request.getSession(true).setAttribute(BMDataContext.USER_SESSION_NAME , user) ; + } + + + /** + * 创建系统监控的 模板页面 + * @param page + * @return + */ + public UKView createAdminTempletResponse(String page) { + return new UKView("/admin/include/tpl" , page); + } + /** + * 创建系统监控的 模板页面 + * @param page + * @return + */ + public UKView createAppsTempletResponse(String page) { + return new UKView("/apps/include/tpl" , page); + } + + /** + * 创建系统监控的 模板页面 + * @param page + * @return + */ + public UKView createEntIMTempletResponse(String page) { + return new UKView("/apps/entim/include/tpl" , page); + } + + public UKView createRequestPageTempletResponse(String page) { + return new UKView(page); + } + + /** + * + * @param data + * @return + */ + public ModelAndView request(UKView data) { + return new ModelAndView(data.getTemplet()!=null ? data.getTemplet(): data.getPage() , "data", data) ; + } + + public int getP(HttpServletRequest request) { + int page = 0; + String p = request.getParameter("p") ; + if(!StringUtils.isBlank(p) && p.matches("[\\d]*")){ + page = Integer.parseInt(p) ; + if(page > 0){ + page = page - 1 ; + } + } + return page; + } + + public int getPs(HttpServletRequest request) { + int pagesize = PAGE_SIZE_TW; + String ps = request.getParameter("ps") ; + if(!StringUtils.isBlank(ps) && ps.matches("[\\d]*")){ + pagesize = Integer.parseInt(ps) ; + } + return pagesize; + } + + public int get50Ps(HttpServletRequest request) { + int pagesize = PAGE_SIZE_FV; + String ps = request.getParameter("ps") ; + if(!StringUtils.isBlank(ps) && ps.matches("[\\d]*")){ + pagesize = Integer.parseInt(ps) ; + } + return pagesize; + } + + public String getOrgi(HttpServletRequest request) + { + return getUser(request).getOrgi(); + } +} diff --git a/src/main/java/com/beimi/web/handler/api/ApiLoginController.java b/src/main/java/com/beimi/web/handler/api/ApiLoginController.java new file mode 100644 index 0000000..1e5238c --- /dev/null +++ b/src/main/java/com/beimi/web/handler/api/ApiLoginController.java @@ -0,0 +1,66 @@ +package com.beimi.web.handler.api; + +import java.util.Date; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.beimi.core.BMDataContext; +import com.beimi.util.UKTools; +import com.beimi.util.cache.CacheHelper; +import com.beimi.web.handler.Handler; +import com.beimi.web.model.User; +import com.beimi.web.service.repository.UserRepository; + +@RestController +@RequestMapping("/tokens") +public class ApiLoginController extends Handler{ + + @Autowired + private UserRepository userRepository; + + @SuppressWarnings("rawtypes") + @RequestMapping(method = RequestMethod.POST) + public ResponseEntity login(HttpServletRequest request , HttpServletResponse response , @Valid User user) { + User loginUser = userRepository.findByUsernameAndPassword(user.getUsername() , UKTools.md5(user.getPassword())) ; + ResponseEntity entity = null ; + if(loginUser!=null && !StringUtils.isBlank(loginUser.getId())){ + loginUser.setLogin(true); + loginUser.setLastlogintime(new Date()); + if(!StringUtils.isBlank(loginUser.getId())){ + userRepository.save(loginUser) ; + } + String auth = UKTools.getUUID(); + CacheHelper.getApiUserCacheBean().put(auth, loginUser, BMDataContext.SYSTEM_ORGI); + entity = new ResponseEntity<>(auth, HttpStatus.OK) ; + response.addCookie(new Cookie("authorization",auth)); + }else{ + entity = new ResponseEntity<>(HttpStatus.UNAUTHORIZED) ; + } + return entity; + } + + @SuppressWarnings("rawtypes") + @RequestMapping(method = RequestMethod.GET) + public ResponseEntity error(HttpServletRequest request) { + return new ResponseEntity<>(super.getUser(request) , HttpStatus.OK); + } + + @SuppressWarnings("rawtypes") + @RequestMapping(method = RequestMethod.DELETE) + public ResponseEntity logout(HttpServletRequest request , @RequestHeader(value="authorization") String authorization) { + return new ResponseEntity<>(HttpStatus.OK); + } + +} \ No newline at end of file diff --git a/src/main/java/com/beimi/web/handler/api/rest/ApiUserController.java b/src/main/java/com/beimi/web/handler/api/rest/ApiUserController.java new file mode 100644 index 0000000..7ccdf30 --- /dev/null +++ b/src/main/java/com/beimi/web/handler/api/rest/ApiUserController.java @@ -0,0 +1,34 @@ +package com.beimi.web.handler.api.rest; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.beimi.web.handler.Handler; +import com.beimi.web.model.User; +import com.beimi.web.service.repository.UserRepository; + +@RestController +@RequestMapping("/api/user") +public class ApiUserController extends Handler{ + + @Autowired + private UserRepository userRepository; + + + @RequestMapping(method = RequestMethod.GET) + public ResponseEntity get(HttpServletRequest request , @RequestParam String id) { + User user = null ; + if(!StringUtils.isBlank(id)){ + user = userRepository.findByIdAndOrgi(id, super.getOrgi(request)) ; + } + return new ResponseEntity<>(user, HttpStatus.OK); + } +} \ No newline at end of file diff --git a/src/main/java/com/beimi/web/handler/interceptor/CrossInterceptorHandler.java b/src/main/java/com/beimi/web/handler/interceptor/CrossInterceptorHandler.java new file mode 100644 index 0000000..d556a8d --- /dev/null +++ b/src/main/java/com/beimi/web/handler/interceptor/CrossInterceptorHandler.java @@ -0,0 +1,30 @@ +package com.beimi.web.handler.interceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +public class CrossInterceptorHandler extends HandlerInterceptorAdapter { + + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) + throws Exception { + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT"); + response.setHeader("Access-Control-Max-Age", "3600"); + response.setHeader("Access-Control-Allow-Headers", "x-requested-with, accept, authorization, content-type"); + response.setHeader("X-Frame-Options", "SAMEORIGIN"); + return true ; + } + + public void postHandle(HttpServletRequest arg0, HttpServletResponse response, Object arg2, + ModelAndView view) throws Exception { + + } + + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) + throws Exception { + } + +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 6fd8ca3..17325bc 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -37,7 +37,7 @@ spring.hazelcast.config=classpath:config/hazelcast.xml spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.jdbc.Driver -spring.datasource.url=jdbc:mysql://localhost:3306/beixi?useUnicode=true&characterEncoding=UTF-8 +spring.datasource.url=jdbc:mysql://localhost:3306/beimi?useUnicode=true&characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=123456 diff --git a/src/main/resources/config/hazelcast.xml b/src/main/resources/config/hazelcast.xml index 66b072b..e21b433 100644 --- a/src/main/resources/config/hazelcast.xml +++ b/src/main/resources/config/hazelcast.xml @@ -24,8 +24,8 @@ xmlns="http://www.hazelcast.com/schema/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - UCKeFu - UCKeFu-1234567890 + BeiMi + BeiMi-1234567890 5701 @@ -180,6 +180,22 @@ INDEX-ONLY + + + BINARY + 1 + 0 + + 604800 + + 28800 + NONE + 0 + 25 + 100 + com.hazelcast.map.merge.PutIfAbsentMapMergePolicy + INDEX-ONLY + 1