基于javaweb+mysql的健身管理系统(java+ssm+springboot)

运行环境

Java≥8、MySQL≥5.7

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

基于javaweb+springboot的健身房管理系统(Java+ssm+springboot)

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

主要功能截图如下:

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

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

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

会员私教课程管理:

添加私教信息:

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

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

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

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

简单的树状图统计:

代码:

数据库表:

管理员登录代码如下:

/**

  • @Descriiption: 管理员登录Controller控制层

  • xiaoc

  • @Date: 2020/4/4

*/

@Controller

@RequestMapping(“/”)

public class AdminuserConntroller {

@Autowired

private AdminuserDao adminuserDao;

/**

  • @Descriiption: 输入端口号直接跳转登录界面

  • xiaoc

  • @Date: 2020/4/29

*/

@RequestMapping(“/”)

public String beforeLogin(){

return “login”;

/**

  • @Descriiption: 管理员登录验证方法

  • 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”;*/

/**

  • @Descriiption: 退出登录后清楚session

  • xiaoc

  • @Date: 2020/5/1

*/

@RequestMapping(“/logout”)

public String logout(){

Subject subject = SecurityUtils.getSubject();

subject.logout();

return “redirect:/login”;

/**

  • @Descriiption: 跳转到修改密码界面

  • xiaoc

  • @Date: 2020/5/1

*/

@RequestMapping(“/updPassword”)

public String updPassword(){

return “WEB-INF/jsp/updPassword”;

/**

  • @Descriiption: 修改密码

  • 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;

// }

@Bean

public MyRealm getMyRealm(){

MyRealm myRealm = new MyRealm() ;

// myRealm.setCredentialsMatcher(getHashedCredentialsMatcher());

return myRealm ;

@Bean

public SimpleCookie rememberMeCookie() {

//System.out.println(“ShiroConfiguration.rememberMeCookie()”);

//这个参数是cookie的名称,对应前端的checkbox的name = rememberMe

SimpleCookie simpleCookie = new SimpleCookie(“ckbox”);

//

simpleCookie.setMaxAge(259200);

return simpleCookie;

@Bean

public EhCacheManager getEhCacheManager(){

EhCacheManager ehCacheManager = new EhCacheManager() ;

ehCacheManager.setCacheManagerConfigFile(“classpath:ehcache-shiro.xml”);

return ehCacheManager ;

@Bean

public 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;

@Bean

public DefaultWebSecurityManager getDefaultWebSecurityManager(){

DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager() ;

defaultWebSecurityManager.setRealm(getMyRealm());

//注册记住我

defaultWebSecurityManager.setRememberMeManager(rememberMeManager());

//注册缓存

defaultWebSecurityManager.setCacheManager(getEhCacheManager());

return defaultWebSecurityManager ;

@Bean

public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(){

System.out.println(“开启了Shiro注解支持”);

AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();

authorizationAttributeSourceAdvisor.setSecurityManager(getDefaultWebSecurityManager());

return authorizationAttributeSourceAdvisor;

@Bean

@ConditionalOnMissingBean

public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {

DefaultAdvisorAutoProxyCreator defaultAAP = new DefaultAdvisorAutoProxyCreator();

defaultAAP.setProxyTargetClass(true);

return defaultAAP;

@Bean

public 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”;


基于javaweb+mysql的健身管理系统(java+ssm+springboot)相关推荐

  1. 基于javaweb+mysql的房屋租赁管理系统(java+SSM+Layui+Maven+Mysql+Jsp)

    一.项目简述 功能包括: 房屋租赁管理系统是一款方便快捷,易操作的租房和各种物业收费的管理系统,该系统官网包含着用户和管理员分类登录,减少了为使用管理员系统的开支,用户分别支持手机网上或电脑网页快捷的 ...

  2. 基于javaweb+springboot的健身管理系统(Java+ssm+springboot)

    基于javaweb+springboot的健身管理系统(Java+ssm+springboot) 主要技术:springmvc. springboot .mybatis.mysql .jQuery.l ...

  3. 基于javaweb的高校运动会管理系统(java+ssm+jsp+js+jquery+mysql)

    基于javaweb的高校运动会管理系统(java+ssm+jsp+js+jquery+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/m ...

  4. 基于javaweb的律师事务所律师管理系统(java+ssm+html+js+jsp+mysql)

    基于javaweb的律师事务所律师管理系统(java+ssm+html+js+jsp+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/m ...

  5. 基于javaweb的设备台账管理系统(java+ssm+html+jsp+js+mysql)

    基于javaweb的设备台账管理系统(java+ssm+html+jsp+js+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myec ...

  6. 基于javaweb的医药信息管理系统(java+ssm+html+easyui+mysql)

    基于javaweb的医药信息管理系统(java+ssm+html+easyui+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myec ...

  7. 基于javaweb的中药药方管理系统(java+ssm+jsp+bootstrap+mysql)

    基于javaweb的中药药方管理系统(java+ssm+jsp+bootstrap+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/my ...

  8. 基于javaweb的酒吧后台管理系统(java+ssm+jsp+html+mysql)

    基于javaweb的酒吧后台管理系统(java+ssm+jsp+html+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myeclip ...

  9. 基于javaweb的网吧计费管理系统(java+ssm+html+js+jsp+mysql)

    基于javaweb的网吧计费管理系统(java+ssm+html+js+jsp+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myec ...

最新文章

  1. sw标准件不能配置_思科设备与华为设备在配置Telnet,有啥不一样呢?
  2. 51nod 1138 连续整数的和(数学公式)
  3. Request 分别获取具有相同 name 属性表单元素值
  4. 【转】添加web引用和添加服务引用有什么区别?
  5. 王者荣耀成功的营销之战
  6. 广告roi怎么计算公式_信息流ROI出价技巧详解及计算公式
  7. [转用 jsfl 扩展你的 flash
  8. java 子类 同名参数_Java -- 父类和子类拥有同名变量
  9. Spring源码之bean的加载(一)
  10. access抓取数据_网页数据抓取之当当网
  11. [莓技巧]黑莓7290输入短信时文字变为“?”的解决办法
  12. Alertmanager 通知模板
  13. 天猫淘宝越来越难做了,为什么不考虑下跨境电商?
  14. 去掉Excel 单元格里的字符后面的空格
  15. 干货丨语雀Baklib在产品帮助手册制作过程中的实际亲测
  16. 烽火推系统源码,抖音矩阵系统源码,look look 。
  17. Trilateration Algorithm
  18. MFC exe文件生成的图标更改方法
  19. 搭建简单的struts2框架
  20. 工业重镇向智慧城市转型的德国样本

热门文章

  1. 计算机的学生应该考什么证书
  2. 【小f的刷题笔记】(JS)数组 - 差分数组 LeetCode1109 LeetCode1094
  3. linux的socket模型有哪些,异步io 编程 Linux Socket五种I/O模型(zhuan(3)
  4. session的removeAttribute()和invalidate()的区别 1
  5. 中国智能家居市场发展研究
  6. java抓包asp_菜刀ASP 下载文件抓包
  7. qt中十进制转换为十六进制和二进制字符串,以及二进制字符串转十进制,十六进制字符串
  8. LaTex中的绝对值符号
  9. python3 爬虫(初试牛刀)
  10. 浅析class 、superclass、isMemberOfClass、isKindOfClass