Java實戰(zhàn)項目 健身管理系統(tǒng)
主要技術:springmvc、 springboot 、mybatis、mysql 、jQuery、layui、css、jsp shiro權限控制
主要功能截圖如下:
用戶登錄、首頁主要功能有:會員信息管理、會員到期續(xù)費管理、充值管理、教練課程管理、私教管理、器材管理、小商品售賣管理、信息統(tǒng)計、修改密碼等主要功能:
會員管理、續(xù)卡、會員卡類型管理:
教練列表展示和添加修改刪除教練信息:
會員私教課程管理:
添加私教信息:
健身課程列表展示查詢和添加修改:
健身器材列表展示查詢和添加修改:
物品遺失管理、歸還、添加丟失物品、查詢、取回丟失物品等:
健身房小商品售賣管理:列表數(shù)據(jù)展示、查詢、進貨、售賣 退貨等操作
簡單的樹狀圖統(tǒng)計:
代碼:
數(shù)據(jù)庫表:
管理員登錄代碼如下:
/** * @Description: 管理員登錄Controller控制層 * xiaoc * @Date: 2020/4/4 */ @Controller @RequestMapping("/") public class AdminuserConntroller { @Autowired private AdminuserDao adminuserDao; /** * @Description: 輸入端口號直接跳轉(zhuǎn)登錄界面 * 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: 跳轉(zhuǎn)到修改密碼界面 * 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位并為字母+數(shù)字+特殊字符"); 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 { /** * 密碼校驗規(guī)則HashedCredentialsMatcher * 這個類是為了對密碼進行編碼的 , * 防止密碼在數(shù)據(jù)庫里明碼保存 , 當然在登陸認證的時候 , * 這個類也負責對form里輸入的密碼進行編碼 * 處理認證匹配處理器:如果自定義需要實現(xiàn)繼承HashedCredentialsMatcher */ // @Bean("hashedCredentialsMatcher") // public HashedCredentialsMatcher getHashedCredentialsMatcher() { // HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher(); // //指定加密方式為MD5 // credentialsMatcher.setHashAlgorithmName("MD5"); // //加密次數(shù) // 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()"); //這個參數(shù)是cookie的名稱,對應前端的checkbox的name = rememberMe SimpleCookie simpleCookie = new SimpleCookie("ckbox"); //<!-- 記住我cookie生效時間30天 ,單位秒;--> 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() ; //設置網(wǎng)頁安全管理器 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 ; } }
到此這篇關于Java實戰(zhàn)項目 健身管理系統(tǒng)的文章就介紹到這了,更多相關Java 健身管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java中如何使用?byte?數(shù)組作為?Map?的?key
本文將討論在使用HashMap時,當byte數(shù)組作為key時所遇到的問題及其解決方案,介紹使用String和List這兩種數(shù)據(jù)結(jié)構作為臨時解決方案的方法,感興趣的朋友跟隨小編一起看看吧2023-06-06Java數(shù)據(jù)庫操作庫DButils類的使用方法與實例詳解
這篇文章主要介紹了JDBC數(shù)據(jù)庫操作庫DButils類的使用方法詳解,需要的朋友可以參考下2020-02-02Android應用開發(fā)的一般文件組織結(jié)構講解
這篇文章主要介紹了Android應用開發(fā)的一般文件組織結(jié)構講解,同時附帶介紹了一個獲取Android的文件列表的方法,需要的朋友可以參考下2015-12-12SpringBoot整合Redis哨兵模式的實現(xiàn)示例
Redis哨兵模式是Redis高可用方案的一種實現(xiàn)方式,通過哨兵來自動實現(xiàn)故障轉(zhuǎn)移,從而保證高可用,本文主要介紹了SpringBoot整合Redis哨兵模式的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2024-02-02Java HashMap 如何正確遍歷并刪除元素的方法小結(jié)
這篇文章主要介紹了Java HashMap 如何正確遍歷并刪除元素的方法小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-05-05