首页 > 编程语言 >基于Java的垃圾分类管理系统

基于Java的垃圾分类管理系统

时间:2023-10-25 13:06:23浏览次数:48  
标签:Java String 管理系统 request token 垃圾 2023 response tokenEntity

(文章目录)

具体实现截图

主要功能: 基于java(ssm)垃圾分类管理系统

系统分为小区和管理员两个角色

小区的主要功能有: 1.小区管理者登陆系统 2.垃圾分类信息查看 3.垃圾站信息查看 4.垃圾运输信息查看 5.小区管理者在线报修申请,删除,修改,查询报修信息 6.小区管理员在线投诉,删除,修改,查询投诉信息 7.退出登陆

管理员的主要功能有: 1.管理员输入账户登陆后台 2.小区管理:对小区信息进行添加,修改,删除,查询 3.垃圾分类管理:对垃圾分类信息进行添加,修改,删除,查询 4.垃圾站信息管理:对垃圾站信息进行添加,修改,删除,查询 5.垃圾运输信息管理:对垃圾运输信息进行添加,修改,删除,查询 6.报修信息管理:对小区的报修信息进行查询,状态修改,删除 7.投诉管理:对小区的投诉信息进行查询,状态修改,删除 8.退出登陆 Image Image Image

论文参考

Image Image Image Image

详细视频演示

请联系我获取更详细的演示视频

为什么选择我

自己的网站

网站上传的项目均为博主自己收集和开发的,质量都可以得到保障,适合自己懂一点程序开发的同学使用!

自己的小程序(小蔡coding)

<img src="/i/ll/?i=img_convert/bf4b7eb634528094c670baabe283868c.png" style="zoom:50%;" />

为了方便同学们使用,我开发了小程序版的,名字叫小蔡coding。同学们可以通过小程序快速搜索和定位到自己想要的程序

代码参考

@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
   UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
   if(user==null || !user.getPassword().equals(password)) {
      return R.error("账号或密码不正确");
   }
   String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
   return R.ok().put("token", token);
}

	@Override
	public String generateToken(Long userid,String username, String tableName, String role) {
		TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));
		String token = CommonUtil.getRandomString(32);
		Calendar cal = Calendar.getInstance();   
    	cal.setTime(new Date());   
    	cal.add(Calendar.HOUR_OF_DAY, 1);
		if(tokenEntity!=null) {
			tokenEntity.setToken(token);
			tokenEntity.setExpiratedtime(cal.getTime());
			this.updateById(tokenEntity);
		} else {
			this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime()));
		}
		return token;
	}



/**
 * 权限(Token)验证
 */
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {

    public static final String LOGIN_TOKEN_KEY = "Token";

    @Autowired
    private TokenService tokenService;
    
	@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

		//支持跨域请求
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
	// 跨域时会首先发送一个OPTIONS请求,这里我们给OPTIONS请求直接返回正常状态
	if (request.getMethod().equals(RequestMethod.OPTIONS.name())) {
        	response.setStatus(HttpStatus.OK.value());
            return false;
        }
        
        IgnoreAuth annotation;
        if (handler instanceof HandlerMethod) {
            annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
        } else {
            return true;
        }

        //从header中获取token
        String token = request.getHeader(LOGIN_TOKEN_KEY);
        
        /**
         * 不需要验证权限的方法直接放过
         */
        if(annotation!=null) {
        	return true;
        }
        
        TokenEntity tokenEntity = null;
        if(StringUtils.isNotBlank(token)) {
        	tokenEntity = tokenService.getTokenEntity(token);
        }
        
        if(tokenEntity != null) {
        	request.getSession().setAttribute("userId", tokenEntity.getUserid());
        	request.getSession().setAttribute("role", tokenEntity.getRole());
        	request.getSession().setAttribute("tableName", tokenEntity.getTablename());
        	request.getSession().setAttribute("username", tokenEntity.getUsername());
        	return true;
        }
        
		PrintWriter writer = null;
		response.setCharacterEncoding("UTF-8");
		response.setContentType("application/json; charset=utf-8");
		try {
		    writer = response.getWriter();
		    writer.print(JSONObject.toJSONString(R.error(401, "请先登录")));
		} finally {
		    if(writer != null){
		        writer.close();
		    }
		}
//				throw new EIException("请先登录", 401);
		return false;
    }
}

数据库参考

-- ----------------------------
-- Table structure for token
-- ----------------------------
DROP TABLE IF EXISTS `token`;
CREATE TABLE `token` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `userid` bigint(20) NOT NULL COMMENT '用户id',
  `username` varchar(100) NOT NULL COMMENT '用户名',
  `tablename` varchar(100) DEFAULT NULL COMMENT '表名',
  `role` varchar(100) DEFAULT NULL COMMENT '角色',
  `token` varchar(200) NOT NULL COMMENT '密码',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',
  `expiratedtime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '过期时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='token表';

-- ----------------------------
-- Records of token
-- ----------------------------
INSERT INTO `token` VALUES ('9', '23', 'cd01', 'xuesheng', '学生', 'al6svx5qkei1wljry5o1npswhdpqcpcg', '2023-02-23 21:46:45', '2023-03-15 14:01:36');
INSERT INTO `token` VALUES ('10', '11', 'xh01', 'xuesheng', '学生', 'fahmrd9bkhqy04sq0fzrl4h9m86cu6kx', '2023-02-27 18:33:52', '2023-03-17 18:27:42');
INSERT INTO `token` VALUES ('11', '17', 'ch01', 'xuesheng', '学生', 'u5km44scxvzuv5yumdah2lhva0gp4393', '2023-02-27 18:46:19', '2023-02-27 19:48:58');
INSERT INTO `token` VALUES ('12', '1', 'admin', 'users', '管理员', 'h1pqzsb9bldh93m92j9m2sljy9bt1wdh', '2023-02-27 19:37:01', '2023-03-17 18:23:02');
INSERT INTO `token` VALUES ('13', '21', 'xiaohao', 'shezhang', '社长', 'zdm7j8h1wnfe27pkxyiuzvxxy27ykl2a', '2023-02-27 19:38:07', '2023-03-17 18:25:20');
INSERT INTO `token` VALUES ('14', '27', 'djy01', 'xuesheng', '学生', 'g3teq4335pe21nwuwj2sqkrpqoabqomm', '2023-03-15 12:56:17', '2023-03-15 14:00:16');
INSERT INTO `token` VALUES ('15', '29', 'dajiyue', 'shezhang', '社长', '0vb1x9xn7riewlp5ddma5ro7lp4u8m9j', '2023-03-15 12:58:08', '2023-03-15 14:03:48');

标签:Java,String,管理系统,request,token,垃圾,2023,response,tokenEntity
From: https://blog.51cto.com/u_14519396/8016397

相关文章

  • java MAP集合
    javaMAP集合map集合的特点有哪些?map集合是无序的,键值对,建不能重复,值可以重复,集合中的键可以为空如何给map集合赋值?可以调用map.put()方法,进行赋值(注意!键不可以重复)如何获取到map集合的值?可以调用map.get()方法,可以通过键获取值运行结果如何遍历map集合?便利map集合的......
  • Java拾贝第十一天——IO之File类
    Java拾贝不建议作为0基础学习,都是本人想到什么写什么Java中提供了IO以操控计算机中的文件File类在整个IO包中,与文件相关的类就是File类。使用它可以进行创建或删除文件因为File类是个普通类,初始化它需要调用其有参构造publicFile(Stringpathname){//传参为文件路径}使......
  • 华为云耀云服务器L实例:初级篇-java环境配置
     华为云耀云服务器L实例是一款可快速部署且易于运维的轻量级云服务器,专为中小企业和入门级开发者打造。它不仅拥有华为云擎天架构的强大性能,还具有多项用户体验优化方案,让用户轻松上手,享受简单上云的乐趣。本产品网址为:https://www.huaweicloud.com/product/hecs-light.html......
  • java spring,springmvc,spring boot,spring data,RESTful api设计风格,HTTP协议的四种传
    一.基本技术1.Springmvc=手动接电线(配置xml),提供了一种友好的方式来开发Web应用程序。通过使用诸如DispatcherServlet,ModelAndView和ViewResolver,可以轻松开发Web应用程序。2.SpringBoot=标准插座(第3方开源类库想接入,就按照标准做一个starter的适配),实现了免xml配置和提供......
  • Java类加载机制详解 | 京东云技术团队
    一.类加载器及双亲委派机制类加载器加载类备注启动类加载器(BootstrapClassLoader)JAVA_HOME/jre/lib无上级,无法直接访问由jvm加载拓展类加载器(ExtensionClassLoader)JAVA_HOME/jre/lib/ext父加载器为Bootstrap,显示为null。该类由Bootstrap加载应用类加载器(ApplicationClassLoa......
  • Java 流程控制 01~12
    Java流程控制01~121.Scanner对象实现获取用户输入​ 1.1.scanner基本用法Scannerscanner=newScanner(System.in);//接受用户inputif(scanner.hasNextLine()){//判断用户是否输入Stringstr=scanner.nextLine();//获取用户输入System.out.println("......
  • Java图片压缩遇到 "No suitable ImageReader found for source data."
     问题:使用压缩工具的时候突然遇到图片压缩失败的情况。此时检查一下要上传的图片是否正常。处理方式:检查图片数据是否异常,一个图片五六兆。图片虽然是JPG结尾的,但是不在“ ImageIO”类的支持范围内。例如 WebP图片虽然可以以JPG格式结尾,但是 “ ImageIO”类......
  • 「Java开发指南」如何在MyEclipse中使用JPA和Spring管理事务?(二)
    本教程中介绍一些基于JPA/spring的特性,重点介绍JPA-Spring集成以及如何利用这些功能。您将学习如何:为JPA和Spring设置一个项目逆向工程数据库表来生成实体实现创建、检索、编辑和删除功能启用容器管理的事务在上文中,我们为大家介绍了如何用JPA和SpringFacets创建一个Java......
  • Jenkins配置java和vue构建环境
    jdk,maven,node,localtime等配置可通过挂载的方式进行配置前提条件是虚拟机中已配置好jdk,maven,node等环境注意自己虚拟机相关环境配置的路径以下样例为我自己的虚拟机中的配置路径-v宿主机(虚拟机)路径:容器路径dockerrun--namejenkins-p28081:8080-p50000:50000-v/v......
  • Java双端队列Deque简述
    概述​ Deque是一个双端队列接口,继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。​ Deque是一个线性collection,支持在两端插入和移除元素。名称deque是“doubleendedqueue(双端队列)”的缩写,通常读为“deck”。大多数......