{"id":14983067,"url":"https://github.com/rojeralone/shop","last_synced_at":"2025-04-06T00:10:28.510Z","repository":{"id":21738502,"uuid":"92895390","full_name":"RojerAlone/shop","owner":"RojerAlone","description":"SSM 框架搭建的网上游戏商城（仿Steam）","archived":false,"fork":false,"pushed_at":"2023-02-22T06:58:55.000Z","size":63611,"stargazers_count":357,"open_issues_count":10,"forks_count":79,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-03-29T23:10:00.839Z","etag":null,"topics":["mybatis","spring","springmvc","springmvc-mybatis","ssm"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RojerAlone.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-05-31T02:23:15.000Z","updated_at":"2025-03-23T18:22:46.000Z","dependencies_parsed_at":"2024-09-24T11:12:20.108Z","dependency_job_id":null,"html_url":"https://github.com/RojerAlone/shop","commit_stats":{"total_commits":127,"total_committers":4,"mean_commits":31.75,"dds":0.2362204724409449,"last_synced_commit":"1161b7b7ad35fbe9afa156ab34f87c0bce065722"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RojerAlone%2Fshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RojerAlone%2Fshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RojerAlone%2Fshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RojerAlone%2Fshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RojerAlone","download_url":"https://codeload.github.com/RojerAlone/shop/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247415973,"owners_count":20935387,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mybatis","spring","springmvc","springmvc-mybatis","ssm"],"created_at":"2024-09-24T14:06:40.724Z","updated_at":"2025-04-06T00:10:28.490Z","avatar_url":"https://github.com/RojerAlone.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Shop SSM框架搭建的网上游戏商城\n## 项目信息\n- 项目名字：WePlay\n- 项目描述：基于SSM框架的网上游戏商城\n## 环境配置\n- JDK 1.8\n- Spring 5.1.7\n- MyBatis 3.4\n- MySQL 5.7.18\n- Maven 3\n- Redis 3.0\n- Tomcat 8.5.15\n### maven 阿里云仓库\n```xml\n\u003cmirror\u003e\n    \u003cid\u003ealimaven\u003c/id\u003e\n    \u003cname\u003ealiyun maven\u003c/name\u003e\n    \u003curl\u003ehttp://maven.aliyun.com/nexus/content/groups/public/\u003c/url\u003e\n    \u003cmirrorOf\u003ecentral\u003c/mirrorOf\u003e        \n\u003c/mirror\u003e\n```\n# 一些问题及解决方案\n## 跨域请求\n　　在`Controller`控制器中添加了`@CrossOrigin`注解。\n## 用`token`验证用户身份\n　　使用唯一识别码`token`来识别每一个用户，用户登陆后生成一个`token`写入数据库和缓存中，同时写入到response中的cookie中，这样以后每次请求都会带上这个`token`，用`AuthInterceptor`对所有的请求进行拦截，根据`token`从缓存中查取对应的`uid`，再从数据库中查取对应的用户详情，并存到[`UserHolder`](https://github.com/RojerAlone/shop/blob/master/src/main/java/cn/cie/utils/UserHolder.java)这个工具类中。\n## 拦截器进行权限处理\n　　很多接口只有用户验证了才能进行下一步操作，写了一个拦截器对特定的请求进行拦截，如果用户没有登录，就跳转到登陆页面，登陆成功后跳转到之前的页面。\n## 使用`Redis`\n　　几乎所有的页面都会加载商品种类，因此将商品的种类信息放入缓存中；网站首页有一个每日推荐，是每天零时随机生成5个商品，由于这些商品访问频率高，因此将这5个商品放入缓存中，可将访问速度由10\\~20ms 缩减到3\\~5ms。\n\n　　同时用户`token`也放入了缓存中，并设置过期时间为1天，如果用户选择了保持登陆状态7天，那么`token`过期后再从数据库中取出放入缓存中。\n\n　　用户注册后需要验证邮箱，将验证码放入缓存中，15分钟过期。\n\n　　将重量型事件抽取出来，用Redis模拟消息队列，创建多线程添加到线程池中，线程从队列中获取消息并执行，比如发送邮件操作。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frojeralone%2Fshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frojeralone%2Fshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frojeralone%2Fshop/lists"}