<!-- 登陆拦截 -->
<mvc:interceptors>
<bean id="loginInterceptor" class="com.atguigu.atcrowdfunding.interceptor.LoginInterceptor"></bean>
<bean id="loginInterceptor" class="com.atguigu.atcrowdfunding.interceptor.PermissionInterceptor"></bean>
</mvc:interceptors>
package com.atguigu.atcrowdfunding.interceptor;
//public class LoginInterceptor implements HandlerInterceptor {
public class LoginInterceptor extends HandlerInterceptorAdapter {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
String servletPath = request.getServletPath();
System.out.println(servletPath);
Set<String> urls = new HashSet<String>();
urls.add("/index.htm");
urls.add("/login.htm");
urls.add("/main.htm");
urls.add("/doLogin.do");
urls.add("/register.htm");
urls.add("/doRegister.do");
if(urls.contains(servletPath)){
return true;
}
User user = (User)request.getSession().getAttribute(Const.LOGIN_USER);
if(user == null){
response.sendRedirect(request.getContextPath()+"/login.htm");
return false;
}else{
return true;
}
}
}
package com.atguigu.atcrowdfunding.interceptor;
@Component
public class PermissionInterceptor extends HandlerInterceptorAdapter {
@Autowired
private PermissionService permissionService;
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String servletUrl = request.getServletPath();
System.out.println(servletUrl);
Set<String> urls = new HashSet<String>();
urls.add("/index.htm");
urls.add("/login.htm");
urls.add("/main.htm");
urls.add("/doLogin.do");
urls.add("/register.htm");
urls.add("/doRegister.do");
if(urls.contains(servletUrl)){
return true;
}
List<Permission> queryAllPermission = permissionService.queryAllPermission();
Set<String> allurls = new HashSet<String>();
for (Permission permission : queryAllPermission) {
if(StringUtil.isNotEmpty(permission.getUrl())){
allurls.add("/"+permission.getUrl());
}
}
if(allurls.contains(servletUrl)){
Set<String> set = new HashSet<String>();
User user = (User) request.getSession().getAttribute(Const.LOGIN_USER);
List<Permission> queryPermissionByUserId = permissionService.queryPermissionByUserId(user.getId());
for (Permission permission : queryPermissionByUserId) {
set.add("/"+permission.getUrl());
}
if(set.contains(servletUrl)){
return true;
}
response.sendRedirect(request.getContextPath()+"/error/error.htm");
return false;
}else{
return true;
}
}
}
文章浏览阅读558次,点赞4次,收藏4次。在迁移老项目的数据库时,使用Navicat Premium的数据传输功能同步了表结构和数据。但是,发现某些字段的数据类型出现了错误,例如,租户ID从Oracle的NUMBER类型变成了MySQL的,正确的应该是bigInt(20)。此外,逻辑删除标记DEL_FLAG也出错,应该是int(1),但现在是decimal类型。由于涉及到数百个表,手动更改显然不现实。下面来看看如何实现批量修改这些字段的数据类型。
文章浏览阅读807次,点赞21次,收藏22次。1.背景介绍在当今的数字时代,平台治理开发已经成为一种重要的技术手段,用于确保平台的稳定性和容错性。在大数据、人工智能和云计算等领域,平台治理开发的重要性更加突显。本文将从以下几个方面进行深入探讨:平台治理开发的背景与意义平台治理开发的核心概念与联系平台治理开发的核心算法原理和具体操作步骤平台治理开发的具体代码实例平台治理开发的未来发展趋势与挑战平台治理开发的常见问题与解答...
文章浏览阅读2.9k次,点赞2次,收藏8次。一、搭建http服务器'use strict'var http =require('http');var app=http.createServer(function(req,res){ res.writeHead(200,{'Content-Type':'text/plain'}); res.end('Http:Hello World\n');}).listen(8081..._webrtc nodejs
文章浏览阅读6.8k次,点赞7次,收藏20次。简单实现队列先进先出:package com;import java.util.LinkedList;public class MyQueue{ private LinkedList list = new LinkedList(); public void put(Object t){ //加入数据 list.addFirst(t); }..._java请编写类fifoqueue实现接口collection,fifoqueue类实现先进先出队列的数据操
文章浏览阅读1.3k次,点赞9次,收藏13次。Univer 是一套企业文档与数据协同解决方案,包括电子表格、文档和幻灯片三大文档类型,高可扩展性设计使得开发者可以在 Univer 的基础上定制个性化功能。它的前身是Luckysheet ,Luckysheet 是一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源。一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源。_univer在线表格
文章浏览阅读586次。分布式缓存出于如下考虑,首先是缓存本身的水平线性扩展问题,其次是缓存大并发下的本身的性能问题,再次避免缓存的单点故障问题(多副本和副本一致性)。分布式缓存的核心技术包括首先是内存本身的管理问题,包括了内存的分配,管理和回收机制。其次是分布式管理和分布式算法,其次是缓存键值管理和路由。
文章浏览阅读635次,点赞8次,收藏14次。通常,原有 CAN 网络的节点都是会通过总线向网络广播报文的,因此,加入网络的新节点也可以根据接收报文的状态来修正波特率,从而达到自适应网络波特率的目的。基于式(1)~(5)及采样点的设置规则,确定实验所用的波特率列表,列表中共包含15个常用波特率,取值分别为:20kb/s、33.33kb/s、40kb/s、50kb/s、66.66kb/s、 80kb/s、100kb/s、125kb/s、200kb/s、250kb/s、400kb/s、 500kb/s、666kb/s、800kb/s和1000kb/s。_stm32 can 自适应波特率
文章浏览阅读504次,点赞16次,收藏2次。在视频创作的世界里,拥有一个可靠的素材来源是成功的关键之一。这些网站涵盖了从自然风光到城市生活,从抽象动画到实际操作的各种视频素材,希望能帮助你找到完美匹配你创意的素材。创作是一个既富有挑战也充满乐趣的过程,愿这些建议能够激发你的创意灵感,帮助你制作出更多精彩的视频作品。无论你是希望通过视频讲述故事,还是通过影像传达信息,高质量的无水印素材都能帮助你,以下这八个全球各地的视频素材网站将为你的创作之旅提供宝贵的资源。优点:提供大量适合中文用户的视频素材,非常适合中国市场。提供免费和高级订阅服务的视频素材。
文章浏览阅读2.5k次。//人脸检测和人脸比对百度ai人脸检测//1.获取access_token//每次更新access_token//获取client_id和client_secret使用百度ai的下面这个已经失效//client_id=YXtYiFxEUU7OBFF4sG6K1v88&client_secret=j1a5FdWp4jvGzwS0n37hzy1kKh9rIQog//uni.request(..._uni-app 人脸对比虹软
文章浏览阅读2.4k次。需求静默安装软件,动态配置参数解决第一步:按引导创建脚本,这部分就不描述了; Script generated by the Inno Setup Script Wizard.; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!#define MyAppName &quot;My Test&quot;#defi..._inno setup如何修改用户信息框说明
文章浏览阅读2.1w次,点赞14次,收藏140次。关于OpenMVG与OpenMVS之间的关系可见下图。关于目前常用的三维重建系统的对比见网址:http://leohope.com/%E8%A7%A3%E9%97%AE%E9%A2%98/2018/03/06/compare-re3d-system/可见OpenMVG与OpenMVS搭配使用,可以实现一个完美的三维重建流程。下面开始讲解两者的配置与简单使用: 1. 编译 o..._openmvg+openmvs
文章浏览阅读551次。demo在线下载地址(完整代码包含插件地址)http://www.shagua.wiki/project/3?p=125_select多选下拉框 源码