首页 > 编程语言 >基于Java的健身运动网站设计与实现

基于Java的健身运动网站设计与实现

时间:2023-10-21 12:08:18浏览次数:29  
标签:基于 Java String 健身 token 管理员 tokenEntity 2023 健身运动

(文章目录)

具体实现截图

主要功能: 基于java(ssm)健身运动网站系统

系统分为用户和管理员两个角色

用户的主要功能有: 1.用户注册和登陆系统 2.查看健身知识 3.查看健身器材介绍信息 4.查看健身教练,在线预约教练 5.查看健身课程,在线购买课程信息 6.查看健身商品信息,在线购买健身商品,生成订单 7.查看健身论坛,用户可以在线发布健身帖子,回复帖子 8.用户个人中心修改个人资料,个人密码 9.用户查看预约的教练信息 10.用户查看购买的课程信息 11.用户查看购买的商品订单记录信息 12.退出登陆

管理员的主要功能有: 1.管理员输入账户登陆后台 2.个人中心:管理员修改密码和账户信息 3.用户管理:对注册的用户信息进行添加,删除,修改,查询 4.健身知识管理:管理员对网站的健身知识进行添加,删除,修改,查询 5.健身类型管理:管理员对健身类型信息进行添加,删除,修改,查询 6.健身器材管理:管理员对健身器材信息进行添加,删除,修改,删除 7.健身教练管理:管理员对健身教练信息进行添加,删除,修改,删除 8.健身课程管理:管理员对健身课程信息进行添加,删除,修改,删除 9.健身商品管理:管理员对健身商品信息进行添加,删除,修改,删除 10.教练预约管理:管理员对教练预约信息进行删除,修改,删除 11.课程购买管理:管理员对用户购买的健身课程信息进行查询,修改,删除 12.商品订单管理:管理员对商品订单信息进行查询,修改,删除 13.健身论坛管理:管理员对健身论坛信息进行添加,修改,删除,查询 14.轮播图管理:对网站轮播图进行添加,修改,查询,删除 15.退出系统

Image Image Image

论文参考

Image Image Image

详细视频演示

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

代码参考

@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');

源码获取

<font color=red>文章下方名片联系我即可~ 大家点赞、收藏、关注、评论啦 、查看

标签:基于,Java,String,健身,token,管理员,tokenEntity,2023,健身运动
From: https://blog.51cto.com/u_14519396/7965296

相关文章

  • Java零基础入门-常量
    前言在学习Java语言的过程中,常量是一个非常重要的概念。它不仅在代码中被广泛应用,而且在Java面试中也是被常问到的知识点。因此,本篇文章将着重介绍Java中常量的相关知识,希望能够帮助Java初学者更好地掌握这个概念。摘要本文主要介绍Java中的常量。首先,我们将讲解常量的概念和作......
  • Java零基础入门-包装类
    前言Java是一种广泛使用的面向对象编程语言,它通过JVM(Java虚拟机)来实现跨平台。如果您刚刚开始学习Java编程语言,那么您可能会发现Java中的包装类是一个挑战。本文将对Java中的包装类进行详细介绍,以帮助您更好地理解Java编程语言。摘要在Java编程语言中,包装类用于将基本数据类型转......
  • Java零基础入门-自动拆箱
    前言Java作为目前最流行的编程语言之一,受到广泛的关注和应用。但是对于零基础的Java初学者来说,由于其语言复杂度较高,入门难度较大。特别是在处理数据类型时,自动拆箱这个概念更是容易让人产生困惑。因此,本文旨在对Java中的自动拆箱进行详细讲解,帮助初学者更好地理解和运用Java语言......
  • 【WSN】基于XBea连续监测无线温度传感器网络附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 【图像分割】基于回溯搜索算法BSA的多阈值图像分割算法研究附Matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 10.18 Java异常处理2
     以上便是Java中异常的基本代码结构,其中,Java中所有异常都派生于excption以下是jdk中与异常相关的类。 ......
  • Java 实现结巴分词
    pom.xml引入结巴分词maven依赖<dependency> <groupId>com.huaban</groupId> <artifactId>jieba-analysis</artifactId> <version>1.0.2</version></dependency>测试@Testpublicvoidtest(){StringgoodsNa......
  • 10.17 Java异常处理1
     eg:importjavax.swing.*;classAboutException{publicstaticvoidmain(String[]a){inti=1,j=0,k;k=i/j;try{k=i/j;//Causesdivision-by-zeroexception//thrownewException("Hello.Exception!&quo......
  • 查看当前的git分支是基于哪个分支创建的
    比如我从branchA切出一个branchB然后在branchB做了一系列的操作后来忘记了branchB是从哪个分支切出来的这个时候怎么找到基于哪个分支创建的呢?在相应的目录打开命令窗口gitreflogshow分支名或gitreflog--date=local|grep分支名都可以如果分支是从sour......
  • 从零开始的Java编程:教你如何实现“超级马里奥”游戏!
    引言超级马里奥,这个名字对于游戏迷来说一定不陌生。它是一款经典的游戏系列,以一个勇敢的水管工人——马里奥为主角,讲述了他在蘑菇王国中的冒险故事。在这个充满挑战和刺激的游戏中,玩家需要控制马里奥跳跃、躲避障碍物,并与邪恶的蘑菇和食人花敌人战斗,最终抵达城堡的胜利之地。游......