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

本文介绍了基于Java Web和MySQL的健身管理系统,运行环境要求Java≥8、MySQL≥5.7,开发工具多样。系统采用Spring MVC、Spring Boot、MyBatis等技术,具备会员管理、课程管理、器材管理等功能,还给出了管理员登录、用户管理等代码及密码加密配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

运行环境

Java≥8、MySQL≥5.7

开发工具

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

适用

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

功能说明

20220519000756

20220519000757

20220519000758

20220519000800

20220519000801

20220519000802

20220519000803

20220519000804

20220519000806

20220519000807

20220519000808

20220519000809

20220519000810

20220519000812

20220519000813

20220519000814

20220519000815

基于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”;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值