当前位置: 首页 > 编程日记 > 正文

Java项目:健身管理系统(Java+ssm+springboot)

源码获取:博客首页 "资源" 里下载!

主要技术:springmvc、 springboot 、mybatis、mysql 、jQuery、layui、css、jsp shiro权限控制


主要功能截图如下:

用户登录、首页主要功能有:会员信息管理、会员到期续费管理、充值管理、教练课程管理、私教管理、器材管理、小商品售卖管理、信息统计、修改密码等主要功能:

会员管理、续卡、会员卡类型管理:

教练列表展示和添加修改删除教练信息:

会员私教课程管理:

添加私教信息:

健身课程列表展示查询和添加修改:

健身器材列表展示查询和添加修改:

物品遗失管理、归还、添加丢失物品、查询、取回丢失物品等:

健身房小商品售卖管理:列表数据展示、查询、进货、售卖 退货等操作

简单的树状图统计:

代码:

数据库表:

管理员登录代码如下:

/*** @Description: 管理员登录Controller控制层* xiaoc* @Date: 2020/4/4*/
@Controller
@RequestMapping("/")
public class AdminuserConntroller {@Autowiredprivate AdminuserDao adminuserDao;/*** @Description: 输入端口号直接跳转登录界面* xiaoc* @Date: 2020/4/29*/@RequestMapping("/")public String beforeLogin(){return "login";}/*** @Description: 管理员登录验证方法* xiaoc* @Date: 2020/4/4*/@RequestMapping("/dl/yz")public String login(String username, String password,HttpSession httpSession,Model model){Subject subject= SecurityUtils.getSubject();UsernamePasswordToken userToken=new UsernamePasswordToken(username,DigestUtils.md5Hex(password));try{subject.login(userToken);Adminuser a= adminuserDao.findByAdminNameAndAdminPassword(username,DigestUtils.md5Hex(password));httpSession.setAttribute("user",a);return "WEB-INF/jsp/index";}catch (UnknownAccountException e){model.addAttribute("msg","用户名或密码错误,请重新输入");return "login";}/*Adminuser a= adminuserDao.findByAdminNameAndAdminmima(username,password);if(a!=null){httpSession.setAttribute("user",a);return "WEB-INF/jsp/index" ;}model.addAttribute("mag","账号或密码错误");return "login";*/}/*** @Description: 退出登录后清楚session* xiaoc* @Date: 2020/5/1*/@RequestMapping("/logout")public String logout(){Subject subject = SecurityUtils.getSubject();subject.logout();return "redirect:/login";}/*** @Description: 跳转到修改密码界面* xiaoc* @Date: 2020/5/1*/@RequestMapping("/updPassword")public String updPassword(){return "WEB-INF/jsp/updPassword";}/*** @Description: 修改密码* xiaoc* @Date: 2020/5/1*/@RequestMapping("/upd/updPassword")public String updPasswordConfirm(String oldPassword,String newPassword,String newPasswordAgain,HttpSession httpSession,Model model){Pattern p = Pattern.compile("^(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!.%*#?&])[A-Za-z\\d$@$!.%*#?&]{8,}$");Matcher m = p.matcher(newPassword);if(!m.matches()){model.addAttribute("msg","新密码最少为8位并为字母+数字+特殊字符");return "WEB-INF/jsp/updPassword";}if(!newPassword.equals(newPasswordAgain)){model.addAttribute("msg","两次输入新密码不一致,请重新输入");return "WEB-INF/jsp/updPassword";}Adminuser adminuser=(Adminuser) httpSession.getAttribute("user");if(null != adminuser){if(!adminuser.getAdminPassword().equals(DigestUtils.md5Hex(oldPassword))){model.addAttribute("msg","原密码不正确,请重新输入");return "WEB-INF/jsp/updPassword";}adminuserDao.updPassword(adminuser.getAdminId(), DigestUtils.md5Hex(newPassword));}Subject subject = SecurityUtils.getSubject();subject.logout();return "redirect:/login.jsp";}}

密码加密方式:

@Configuration
public class ShiroConfig {/*** 密码校验规则HashedCredentialsMatcher* 这个类是为了对密码进行编码的 ,* 防止密码在数据库里明码保存 , 当然在登陆认证的时候 ,* 这个类也负责对form里输入的密码进行编码* 处理认证匹配处理器:如果自定义需要实现继承HashedCredentialsMatcher*///    @Bean("hashedCredentialsMatcher")//    public HashedCredentialsMatcher getHashedCredentialsMatcher() {//        HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher();//        //指定加密方式为MD5//        credentialsMatcher.setHashAlgorithmName("MD5");//        //加密次数//        credentialsMatcher.setHashIterations(1024);//        credentialsMatcher.setStoredCredentialsHexEncoded(true);//        return credentialsMatcher;//    }@Beanpublic MyRealm getMyRealm(){MyRealm myRealm = new MyRealm() ;//        myRealm.setCredentialsMatcher(getHashedCredentialsMatcher());return myRealm ;}@Beanpublic SimpleCookie rememberMeCookie() {//System.out.println("ShiroConfiguration.rememberMeCookie()");//这个参数是cookie的名称,对应前端的checkbox的name = rememberMeSimpleCookie simpleCookie = new SimpleCookie("ckbox");//<!-- 记住我cookie生效时间30天 ,单位秒;-->simpleCookie.setMaxAge(259200);return simpleCookie;}@Beanpublic EhCacheManager getEhCacheManager(){EhCacheManager ehCacheManager = new EhCacheManager() ;ehCacheManager.setCacheManagerConfigFile("classpath:ehcache-shiro.xml");return ehCacheManager ;}@Beanpublic CookieRememberMeManager rememberMeManager() {//System.out.println("ShiroConfiguration.rememberMeManager()");CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();cookieRememberMeManager.setCookie(rememberMeCookie());//rememberMe cookie加密的密钥 建议每个项目都不一样 默认AES算法 密钥长度(128 256 512 位)//  cookieRememberMeManager.setCipherKey(Base64.decode("2AvVhdsgUs0FSA3SDFAdag=="));return cookieRememberMeManager;}@Beanpublic DefaultWebSecurityManager getDefaultWebSecurityManager(){DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager() ;defaultWebSecurityManager.setRealm(getMyRealm());//注册记住我defaultWebSecurityManager.setRememberMeManager(rememberMeManager());//注册缓存defaultWebSecurityManager.setCacheManager(getEhCacheManager());return defaultWebSecurityManager ;}@Beanpublic AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(){System.out.println("开启了Shiro注解支持");AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();authorizationAttributeSourceAdvisor.setSecurityManager(getDefaultWebSecurityManager());return authorizationAttributeSourceAdvisor;}@Bean@ConditionalOnMissingBeanpublic DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {DefaultAdvisorAutoProxyCreator defaultAAP = new DefaultAdvisorAutoProxyCreator();defaultAAP.setProxyTargetClass(true);return defaultAAP;}@Beanpublic ShiroFilterFactoryBean getShiroFilterFactoryBean(){ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean() ;//设置网页安全管理器shiroFilterFactoryBean.setSecurityManager(getDefaultWebSecurityManager());Map<String,String> map = new LinkedHashMap<String,String>() ;//定义可以直接访问的资源map.put("/login.jsp","anon") ;map.put("/vcode.jsp","anon");map.put("/dl/yz","anon") ;map.put("/static/**","anon") ;//取消认证map.put("/logout","logout") ;////  map.put("/add.jsp","perms[user:*]") ;map.put("/**","user") ;shiroFilterFactoryBean.setFilterChainDefinitionMap(map);shiroFilterFactoryBean.setLoginUrl("/login.jsp");shiroFilterFactoryBean.setUnauthorizedUrl("/unauth.jsp");return shiroFilterFactoryBean ;}}

用户管理控制层:

@Controller  
@RequestMapping("/user")  
public class UserController {@Resource  private IUserService userService;  @ResponseBody@RequestMapping("/login")  public String toIndex(User user,HttpSession session){  String account=user.getAccount();user=userService.userLogin(user.getAccount(),user.getPwd());if(user!=null){List<Map<String,Object>> list = userService.findUserByAccount(account);session.setAttribute("userInfo", JSON.toJSON(list));session.setAttribute("account", account);return "true";}else{return "false";}}  @RequestMapping("/Forward")  public String loginForward(){  return "user/index";}  @RequestMapping("/exit")  public String exit(HttpSession session){  session.invalidate();return "login";}  @RequestMapping("/myInfo")  public String myInfo(HttpSession session){  String account=(String) session.getAttribute("account");List<Map<String,Object>> list = userService.findUserByAccount(account);session.setAttribute("userInfo", JSON.toJSON(list));return "user/index";}  @RequestMapping("/classTable")  public String classTable(HttpSession session){  List<Map<String,Object>> list = userService.findClass();session.setAttribute("classInfo", JSON.toJSON(list));return "user/classTable";}  @RequestMapping("/teachList")  public String teachList(HttpSession session){  return "user/teachList";}  @ResponseBody@RequestMapping("/selectTeach")  public String selectTeach(HttpSession session,Integer id){  List<Map<String,Object>> list = userService.findSeTeach(id);session.setAttribute("SelectTeachInfo", JSON.toJSON(list));return "true";}  @ResponseBody@RequestMapping("/chooseTeach")  public String chooseTeach(Integer id,Integer cid,Integer uid){  userService.chooseTeach(id,cid,uid);return "true";}  @ResponseBody@RequestMapping("/updateUserInfo")  public String updateUserInfo(Integer id,String account,Integer sex,Integer age,String name,String pwd,String tel,String address){  userService.updateUserInfo(id,account,sex,age,name,pwd,tel,address);return "true";}  
}

源码获取:博客首页 "资源" 里下载!

相关文章:

计算几何算法概览

为什么80%的码农都做不了架构师&#xff1f;>>> 计算几何算法概览一、引言 计算机的出现使得很多原本十分繁琐的工作得以大幅度简化&#xff0c;但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简单的通用解决方案&#xff0c;比如几何问题。作为计算…

诚意租房网blog2

&#xff08;一&#xff09;数据库设计部分&#xff1a; 创建数据库hourse: 1&#xff1a;关注表 CREATE TABLE guanzhu ( id int(11) NOT NULL AUTO_INCREMENT, uid int(11) DEFAULT NULL, hid int(11) DEFAULT NULL, time datetime DEFAULT NULL, PRIMARY KEY (id) ) ENGINEI…

基于S3C4510B的一个简单BSP的开发报告

系统环境 &#xff08;一&#xff09; 硬件环境 CPU&#xff1a;S3C4510B SDRAM:W981216DH 16M FLASH:MX29LV160AB 2M &#xff08;二&#xff09; 软件环境 tornado2.01 for arm&#xff08;AKA的FTP上有tornado2.2需要的可以自己去下载&#xff1a;&#…

Java项目:房屋租赁管理系统(java+SSM+Layui+Maven+Mysql+Jsp)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能包括&#xff1a; 房屋租赁管理系统是一款方便快捷&#xff0c;易操作的租房和各种物业收费的管理系统&#xff0c;该系统官网包含着用户和管理员分类登录&#xff0c;减少了为使用管理员…

sdtz技术组成

发送短信数据库表到第二天就删除前一天的的内容重新建表是用触发器功能实现的 回款、发标、发短信一些核心功能是用windows服务运行在服务器上自动运行的 sql管理中的维护计划就能设置自动备份数据库转载于:https://www.cnblogs.com/zheng510ke/p/4562812.html

13个 ASP.NET MVC 的扩展

ASP.NET MVC设计的主要原则之一是可扩展性。处理管线&#xff08;processing pipeline&#xff09;上的所有&#xff08;或大多数&#xff09;东西都是可替换的。因此&#xff0c;如果您不喜欢ASP.NET MVC所使用的约定&#xff08;或缺乏某些约定&#xff09;&#xff0c;您可以…

javascript实例

数组排序 ①冒泡排序 思路&#xff1a; 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。对每一对相邻元素作同样的工作&#xff0c;从开始第一对到结尾的最后一对。在这一点&#xff0c;最后的元素应该会是最大的数。针对所有的元素重复以上的步骤&#xff…

Ubuntu10.04安装Flash插件

1. 从Adobe下载Flash安装程序&#xff0c;并且解压。 tar -xzvf install_flash_player_10_linux.tar.gz 2. 把解压出来的“libflashplayer.so” 复制到 /usr/lib/mozilla/plugins 目录下。 sudo cp libflashplayer.so /usr/lib/mozilla/plugins 3. 执行以下命令&#x…

Java项目:健身俱乐部管理系统(java+SSM+Mysql+Jsp)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 项目介绍&#xff1a; 基于jspmysqlSpringmybatis的SSM健身房管理系统 运行环境: jdk 1.8 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA都可以 tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可&#xf…

通过代理进行页面传值

A 页面跳转到 B页面&#xff0c;在关闭B页面的时候想将B页面的某些内容回传给A页面 在B页面写代理的相关方法 protocol 控制器的名称 Delegate <NSObject> optional -(void) xxxxxx:(控制器 *) control end interface 控制器 : UIViewController property (weak,nonatom…

Linux系统下如何安装软件包

现在一般是使用 RPM &#xff0c;YUM 和 APT 来管理软件包。软件包常用的也就是&#xff0c;查找软件包&#xff0c;安装&#xff0c;卸载&#xff0c;升级。这几个功能。RPM 比较经典&#xff0c;但是也比较麻烦&#xff0c;尤其是在软件依赖关系上面&#xff0c;有的时…

自己设计大学排名-数据库实践

今天我们来学习以下有关于数据提取以及数据库的一些知识&#xff0c; 我们知道其实数据库是一个非常神奇的存在&#xff0c;它是是按照 数据结构来组织、 存储和管理数据的仓库 我们可以使用它对数据进行储存和管理&#xff01; 下面是有关于sqlite3的学习&#xff0c;SQLite3 …

Windows 和 Linux 应用程序从上到下调用层次比较

刚毕业的时候&#xff0c;做了将近一年的Window下的程序开发&#xff0c;主要用MFC&#xff0c;那是也不明白程序在操作系统角度从上到下的整个调用层次。遇到调用库函数&#xff0c;不明白&#xff0c;就查MSDN&#xff0c;每个月1500行代码左右&#xff0c;那时以为这就是软件…

Java项目:药品管理系统(java+swing+Gui+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 功能介绍&#xff1a;用户管理、药品库存管理、进销管理、营销管理、药品购入、药品售出、药市信息 系统主页&#xff1a; SuppressWarnings("serial") public class SystemMainView extends JFr…

WEBSHELL跳板REDUH使用说明

原文链接: http://www.fendou.info/network/webshell-proxy-reduh.html reDuh是可以把内网服务器的端口通过http或https隧道转发到本机&#xff0c;形成一个TCP连通回路&#xff0c;用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部端口的工具。 reDuh和LCX类似&…

站立会议(三)

一、会议时间&#xff1a;2014年4月13日 二、会议目的&#xff1a;统计项目进度以及每个人的进度、计划以及问题 三、会议内容&#xff1a; 党云龙&#xff1a; 今天内容 查阅资料&#xff0c;上网搜索&#xff0c;完成API调用&#xff1b; 遇到问题 还是在实现的时候无法阻止…

python celery

celery 一般用于做异步 和定时任务 不过听网上说 celery 坑还是蛮多的&#xff0c;特别定时任务&#xff0c;我们一般用来做定时任务&#xff0c;还有数据导入导出。celery 不支持 redis cluster 集群模式uWSGI 自带了一个简单的 Spooler 可以处理大部分异步任务和周期运行的任…

c语言实现memcpy

今天到I 公司去面试&#xff0c;面试方式比较特殊&#xff0c;没有笔试&#xff0c;就是2 个面试官&#xff0c;一人一句轮番发问&#xff0c;涉及面很广&#xff0c;涉及到操作系统(MMU 、page out 、process/thread 、semaphore 、interrupt), OOP( 多态、design pattern) 、…

Java项目:图书管理系统(java+swing+Gui+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 功能介绍&#xff1a;借阅列表、图书类别管理、图书馆里、用户管理、借阅管理、关于我们 登录服务类&#xff1a; WebServlet("/LoginServlet") public class LoginServlet extends HttpServlet …

十五天精通WCF——第三天 client如何知道server提供的功能清单

通常我们去大保健的时候&#xff0c;都会找姑娘问一下这里能提供什么服务&#xff0c;什么价格&#xff0c;这时候可能姑娘会跟你口述一些服务或者提供一份服务清单&#xff0c;这样的话大 家就可以做到童嫂无欺&#xff0c;这样一份活生生的例子&#xff0c;在wcf中同样是一个…

MySQL Cluster 日常维护

在前面几篇文章已经详细介绍了MySQL Cluster的搭建&#xff0c;配置讲解。而且相信大家都掌握了基本用法。现在我们来看看Cluster的日常维护。熟悉日常维护&#xff0c;将有助于工作中更好的管理和使用Cluster。 一. 数据备份 相信大家都熟悉mysql的日常备份工具&#xff0c;比…

20165219王彦博《基于Cortex-M4的虚拟机制作与测试》课程设计个人报告

20165219王彦博《基于Cortex-M4的虚拟机制作与测试》课程设计个人报告 一、个人贡献 参与课设题目讨论及完成全过程&#xff1b; 资料收集&#xff1b; 负责环境搭建&#xff0c;代码运行下载&#xff1b; 撰写小组结题报告。 二、设计中遇到的问题及解决方法 1 实验六以太网服…

extern数组与extern指针

数组名代表了存放该数组的那块内存&#xff0c;它是这块内存的首地址。这就说明了数组名 是一个地址&#xff0c;而且&#xff0c;还是一个不可修改的常量&#xff0c;完整地说&#xff0c;就是一个地址常量。数组名 跟枚举常量一样&#xff0c;都属于符号常量。数组名 这个符号…

Java项目:医院管理系统(java+javaweb+jdbc+Mysql+lw)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 功能介绍&#xff1a; 登录、注册、用户/管理员(角色)、用户信息管理、科系信息管理、查看所有科系、新增科系信息、删除指定科系、修改科系信息、病房信息管理、病人信息管理、医生类型管理、病人手术管理…

Mongodb地理空间索引

1、索引&#xff1a; 建立索引既耗时也费力&#xff0c;还需要消耗很多资源。使用{"bakckground":true}选项可以使这个过程在后台完成&#xff0c;同时正常处理请求。如果不包括background 这个选项&#xff0c;数据库会阻塞建立索引期间的所有请求。阻塞的做法会让索…

Juniper的路由器、防火墙、交换机如何恢复出厂配置

Juniper的路由器、防火墙、交换机如何恢复出厂配置有些时候&#xff0c;在正常的业务使用中&#xff0c;逐条删除配置的内容很繁琐&#xff0c;我们可以使用恢复出厂配置&#xff0c;清空设备中的配置&#xff1b;还有的时候&#xff0c;由于设备配置异常&#xff0c;可以使用恢…

【转载】标准输入输出、错误输出、重定向标准输出

【转载】标准输入输出、错误输出、重定向标准输出 原文&#xff1a;标准输入输出、错误输出、重定向标准输出 再来看看 >& 操作符&#xff1a; 重定向操作符描述 > 将命令输出写入到文件或设备&#xff08;如打印机&#xff09;&#xff0c;而不是命令提示符窗口或…

(Interrupt Latency) 中断延迟

中断延迟 (Interrupt Latency) 中断延迟 是指从硬件中断发生到开始执行中断处理程序第一条指令之间的这段时间。 也就是&#xff1a; 计算机接收到中断信号到操作系统作出响应&#xff0c;并完成换到转入中断服务程序的时间。 不严格地&#xff0c;也可以表述为&#xff1a…

Java项目:干活管理系统(java+SSM+Jsp+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 前台用户和后台管理员两种角色&#xff1a; 前台用户功能有&#xff1a;发布兼职、发布帖子、查看公告、个人中心、投诉等。 后台管理员功能有&#xff1a;用户管理、兼职管理、帖子管理、聊天管理、广告管…

20135234mqy 实验四

北京电子科技学院&#xff08;BESTI&#xff09; 实 验 报 告 课程&#xff1a;java程序设计 班级&#xff1a;1352 姓名&#xff1a;mqy 学号&#xff1a;20135234 成绩&#xff1a; 指导教师&#xff1a;娄嘉鹏 实验日期&#xff1a;2015.6…