no commit message
This commit is contained in:
@@ -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 {
|
||||
|
||||
}
|
||||
}
|
||||
21
src/main/java/com/beimi/config/web/UKWebAppConfigurer.java
Normal file
21
src/main/java/com/beimi/config/web/UKWebAppConfigurer.java
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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() {
|
||||
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
|
||||
28
src/main/java/com/beimi/util/UKView.java
Normal file
28
src/main/java/com/beimi/util/UKView.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
59
src/main/java/com/beimi/util/cache/CacheBean.java
vendored
Normal file
59
src/main/java/com/beimi/util/cache/CacheBean.java
vendored
Normal file
@@ -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) ; //初始化 发号器
|
||||
|
||||
}
|
||||
31
src/main/java/com/beimi/util/cache/CacheHelper.java
vendored
Normal file
31
src/main/java/com/beimi/util/cache/CacheHelper.java
vendored
Normal file
@@ -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 ;
|
||||
}
|
||||
|
||||
}
|
||||
31
src/main/java/com/beimi/util/cache/CacheInstance.java
vendored
Normal file
31
src/main/java/com/beimi/util/cache/CacheInstance.java
vendored
Normal file
@@ -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();
|
||||
|
||||
}
|
||||
44
src/main/java/com/beimi/util/cache/hazelcast/HazlcastCacheHelper.java
vendored
Normal file
44
src/main/java/com/beimi/util/cache/hazelcast/HazlcastCacheHelper.java
vendored
Normal file
@@ -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()) ;
|
||||
}
|
||||
}
|
||||
93
src/main/java/com/beimi/util/cache/hazelcast/impl/ApiUserCache.java
vendored
Normal file
93
src/main/java/com/beimi/util/cache/hazelcast/impl/ApiUserCache.java
vendored
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
94
src/main/java/com/beimi/util/cache/hazelcast/impl/MultiCache.java
vendored
Normal file
94
src/main/java/com/beimi/util/cache/hazelcast/impl/MultiCache.java
vendored
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
93
src/main/java/com/beimi/util/cache/hazelcast/impl/OnlineCache.java
vendored
Normal file
93
src/main/java/com/beimi/util/cache/hazelcast/impl/OnlineCache.java
vendored
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
93
src/main/java/com/beimi/util/cache/hazelcast/impl/SystemCache.java
vendored
Normal file
93
src/main/java/com/beimi/util/cache/hazelcast/impl/SystemCache.java
vendored
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
150
src/main/java/com/beimi/web/handler/Handler.java
Normal file
150
src/main/java/com/beimi/web/handler/Handler.java
Normal file
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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<User> 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);
|
||||
}
|
||||
}
|
||||
@@ -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 {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
xmlns="http://www.hazelcast.com/schema/config"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<group>
|
||||
<name>UCKeFu</name>
|
||||
<password>UCKeFu-1234567890</password>
|
||||
<name>BeiMi</name>
|
||||
<password>BeiMi-1234567890</password>
|
||||
</group>
|
||||
<network>
|
||||
<port auto-increment="true" port-count="100">5701</port>
|
||||
@@ -180,6 +180,22 @@
|
||||
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
|
||||
|
||||
</map>
|
||||
|
||||
<map name="api_user_cache">
|
||||
<in-memory-format>BINARY</in-memory-format>
|
||||
<backup-count>1</backup-count>
|
||||
<async-backup-count>0</async-backup-count>
|
||||
<!-- 最大过期时间,7天 -->
|
||||
<time-to-live-seconds>604800</time-to-live-seconds>
|
||||
<!-- 最长空闲时间,8小时 -->
|
||||
<max-idle-seconds>28800</max-idle-seconds>
|
||||
<eviction-policy>NONE</eviction-policy>
|
||||
<max-size policy="PER_NODE">0</max-size>
|
||||
<eviction-percentage>25</eviction-percentage>
|
||||
<min-eviction-check-millis>100</min-eviction-check-millis>
|
||||
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
|
||||
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
|
||||
</map>
|
||||
|
||||
<multimap name="default">
|
||||
<backup-count>1</backup-count>
|
||||
|
||||
Reference in New Issue
Block a user