瀏覽代碼

token校验

lyhzzz 3 年之前
父節點
當前提交
955f5b90ed

+ 53 - 0
src/main/java/com/fdkankan/app/config/OriginFilter.java

@@ -0,0 +1,53 @@
+package com.fdkankan.app.config;
+
+import org.springframework.boot.web.servlet.ServletComponentScan;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+
+@Component("originFilter")
+@ServletComponentScan
+@WebFilter(urlPatterns = "/*", filterName = "shiroLoginFilter")
+public class OriginFilter implements Filter {
+
+	private FilterConfig config = null;
+
+	@Override
+	public void init(FilterConfig config) throws ServletException {
+		this.config = config;
+	}
+
+	@Override
+	public void destroy() {
+		this.config = null;
+	}
+
+	@Override
+	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+		HttpServletResponse response = (HttpServletResponse) servletResponse;
+		HttpServletRequest request = (HttpServletRequest) servletRequest;
+		//指定允许其他域名访问
+		response.setHeader("Access-Control-Allow-Origin", "*");
+		// 允许请求的方法
+		response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE,PUT");
+		// 多少秒内,不需要再发送预检验请求,可以缓存该结果
+		response.setHeader("Access-Control-Max-Age", "3600");
+		// 表明它允许跨域请求包含xxx头
+		response.setHeader("Access-Control-Allow-Headers",
+				"Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires,userAgent,User-Agent,version, " +
+				" Content-Type, content-type,X-E4M-With,Authorization,token,authorization");
+		response.setHeader("Access-Control-Allow-Credentials", "true");
+		if (request.getMethod().equals("OPTIONS")) {
+			response.setStatus(200);
+			response.getWriter().write("OPTIONS returns OK");
+			return;
+		}
+		filterChain.doFilter(servletRequest, response);
+	}
+}
+

+ 36 - 0
src/main/java/com/fdkankan/app/config/WebAppConfig.java

@@ -0,0 +1,36 @@
+package com.fdkankan.app.config;
+
+import com.fdkankan.app.interceptor.TokenInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+
+@Configuration
+public class WebAppConfig implements WebMvcConfigurer {
+
+	@Autowired
+	TokenInterceptor tokenInterceptor;
+
+	@Override
+	public void addCorsMappings(CorsRegistry registry) {
+		registry.addMapping("/**").allowCredentials(true).allowedHeaders("*").allowedOrigins("*").allowedMethods("*");
+
+	}
+
+	@Override
+	public void addInterceptors(InterceptorRegistry registry) {
+		registry.addInterceptor(tokenInterceptor).addPathPatterns("/**").excludePathPatterns("/**/api/sso/**");
+		WebMvcConfigurer.super.addInterceptors(registry);
+	}
+
+	@Override
+	public void addResourceHandlers(ResourceHandlerRegistry registry) {
+		WebMvcConfigurer.super.addResourceHandlers(registry);
+	}
+
+}
+

+ 10 - 1
src/main/java/com/fdkankan/app/controller/AppSceneController.java

@@ -17,11 +17,17 @@ public class AppSceneController {
     @Autowired
     ISceneProService sceneProService;
 
+    /**
+     * 获取云端场景
+     */
     @PostMapping("/getAppAllSceneByPage")
     public Result getAppAllSceneByPage(@RequestBody SceneParam param){
         return Result.success( sceneProService.pageList(param));
     }
 
+    /**
+     * 获取场景计算状态
+     */
     @PostMapping("/getSceneStatusByUnicode")
     public Result getSceneStatusByUnicode(@RequestBody JSONObject param){
         String appUserName = param.get("appUserName") == null ? null : param.getString("appUserName");
@@ -32,6 +38,9 @@ public class AppSceneController {
 
     /**
      * 通知服务器音频上传成功
+     * screencapMusic
+     * originalFileName     音频文件在阿里云的地址Url
+     * sceneNum             场景码
      */
     @PostMapping("/getScreencapVoice")
     public Result getScreencapVoice(@RequestBody JSONObject param) throws Exception {
@@ -42,7 +51,7 @@ public class AppSceneController {
         return Result.success();
     }
     /**
-     * 通知服务器音频上传成功
+     * 删除场景
      */
     @PostMapping("/deleteForCameraName")
     public Result deleteForCameraName(@RequestBody JSONObject param){

+ 4 - 0
src/main/java/com/fdkankan/app/controller/SceneController.java

@@ -15,6 +15,10 @@ public class SceneController {
     @Autowired
     ISceneProService sceneProService;
 
+    /**
+     * 获取指定场景信息
+     * @param num 场景码
+     */
     @GetMapping("/getInfo")
     public Result getAppAllSceneByPage(@RequestParam(required = false) String num){
         return Result.success( sceneProService.getInfo(num) );

+ 60 - 0
src/main/java/com/fdkankan/app/interceptor/TokenInterceptor.java

@@ -0,0 +1,60 @@
+package com.fdkankan.app.interceptor;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.app.common.RedisKeyUtil;
+import com.fdkankan.app.common.Result;
+import com.fdkankan.app.constant.LoginConstant;
+import com.fdkankan.common.util.JwtUtil;
+import com.fdkankan.redis.util.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Component
+@Slf4j
+public class TokenInterceptor implements HandlerInterceptor {
+
+	@Autowired
+	private RedisUtil redisUtil;
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+		response.setContentType("text/html;charset=UTF-8");
+		String token = request.getHeader("token");
+		if(StringUtils.isEmpty(token)){
+			this.needLogin(request,response);
+			return false;
+		}
+		try {
+			String username = JwtUtil.getUsername(token);
+			String redisKey = RedisKeyUtil.PREFIX_CACHE_CAMERA + username;
+			if(redisUtil.hasKey(redisKey)){
+				redisUtil.expire(redisKey,21800L);
+				return true;
+			}
+		}catch (Exception e){
+			e.printStackTrace();
+		}
+		this.needLogin(request,response);
+		return false;
+	}
+
+	private void needLogin(HttpServletRequest request, HttpServletResponse response) {
+		try {
+			String result = JSONObject.toJSONString(Result.failure(LoginConstant.FAILURE_CODE_3004, LoginConstant.FAILURE_MSG_3004));
+			response.getWriter().append(result);
+		} catch (IOException e) {
+			log.info("LoginInterceptor|needLogin|IOException|" + e);
+			e.printStackTrace();
+		}
+	}
+
+}
+

+ 1 - 1
src/main/resources/mapper/app/SceneProMapper.xml

@@ -13,7 +13,7 @@
     </select>
     <select id="findScenePlusNumByCameraIds" resultType="com.fdkankan.app.vo.response.GroupByCount">
         SELECT camera_id as id,count(id)  as count ,max(create_time) as lastTime FROM t_scene_plus
-        WHERE tb_status = 0 AND camera_id is not null
+        WHERE rec_status = 'A' AND camera_id is not null
         and camera_id in
         <foreach item="cameraId" collection="cameraIds" open="(" separator="," close=")">
             #{cameraId}