# SelectiveSystem
# 基于JavaWeb的学生选课系统<br>
• 开发软件:idea、tomcat、mysql<br>
• 开发环境:spring、springMVC、Mybatis <br>
• 项目描述:使用java web为核心部位,使用SSM框架。后台传输json。并且设计了安全权限登录问题。前端分为学生端、教师端和管理员端,使用分页功能,优化了大量数据的效率<br>
• 项目功能:<br>
安全权限功能:在前端使用js进行密码加密,后端使用shiro权限管理,并且再次加密密码,使得数据库存储的用户密码为非对称密钥<br>
会话功能:对用户长时间不操作定时下线,防止用户离开被操作,禁止用户不同ip登录,导致用户数据出错<br>
选课功能:教师添加自己信息和给学生选课成绩打分,管理者负责课程、课程老师的选择并且可以修改学生选课成绩和课程,并生成对应选课信息,学生可以选择对应老师对应的课程,并且可以查看选课成绩<br>
***
![image](https://github.com/chiihero/SelectiveSystem/blob/master/readme/1.png)
![image](https://github.com/chiihero/SelectiveSystem/blob/master/readme/2.png)
![image](https://github.com/chiihero/SelectiveSystem/blob/master/readme/3.png)
1. 加密
对于用户的密码进行了加密,为了减轻服务器的负载优化性能,在前端采用了高强度的加密方式使得整体性能需求集中在用户身上,后端采用了较为低强度的加密方式,并且在加密方式使用加盐使得密码更加难以破解,而且整体都是使用单向加密方式,使得密码加密不可逆。
前端
```java
try {
var shaObj = new jsSHA("SHA3-512", "TEXT", {numRounds: parseInt("4096", 10)});
shaObj.update(encrypt_str);
encrypt_str = shaObj.getHash("HEX");
} catch (e) {
alert(e.message)
}
return hex_md5(encrypt_str);
```
后端
使用了shiro自带的加密模块,在xml文件中定义加密
```xml
<bean id="credentialsMatcher"
class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
<property name="hashAlgorithmName" value="SHA-512"/>
<property name="hashIterations" value="1024"/>
</bean>
```
2. 权限
采用了shiro,Shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存
在本项目中使用了
2.1. Authentication
身份认证/登录,验证用户是不是拥有相应的身份;
```java
UsernamePasswordToken upToken = (UsernamePasswordToken) token;
String username = upToken.getUsername();
Admin admin = userService.getAdminInfoById(username);
if (admin == null) {
throw new UnknownAccountException("没找到帐号");
}
//交给AuthenticatingRealm使用CredentialsMatcher进行密码匹配
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(
admin.getAno(),//principal,
admin.getPassword(),//credentials,
ByteSource.Util.bytes(admin.getAno()),//credentialsSalt,
getName()//realmName
);
```
2.2. Authorization
授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;
```java
String username = (String) principals.getPrimaryPrincipal();
Admin admin = userService.getAdminInfoById(username);//从数据库获取信息
Set<String> roles = new HashSet<>();
if (admin != null) {
roles.add("admin");//赋予管理员权限
roles.add("teacher");//赋予教师权限
roles.add("student");//赋予学生权限
}
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roles);
```
2.3. Session Manager
会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;
```xml
<!-- Shiro去掉URL中的JSESSIONID -->
<property name="sessionIdUrlRewritingEnabled" value="false"/>
<property name="globalSessionTimeout" value="1500000"/><!-- 毫秒 -->
<property name="deleteInvalidSessions" value="true"/>
<property name="sessionValidationSchedulerEnabled" value="true"/>
<property name="sessionValidationScheduler" ref="sessionValidationScheduler"/>
<property name="sessionDAO" ref="sessionDAO"/>
<property name="sessionIdCookieEnabled" value="true"/>
<property name="sessionIdCookie" ref="sessionIdCookie"/>
```
2.4. Cryptography
加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;
2.5. Caching
缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;
2.6. Remember Me
记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。
2.4. Realm
可以有1个或多个Realm,可以认为是安全实体数据源,即用于获取安全实体的;可以是JDBC实现,也可以是LDAP实现,或者内存实现等等;由用户提供;在应用中都需要实现自己的Realm;
3. 模糊查询、表格显示
在jsp页面设置table控件
```html
<table id="grid-data" class="table table-condensed table-hover table-striped">
<thead>
<tr>
<th data-column-id="sno" data-identifier="true">学号</th>
<th data-column-id="sname">姓名</th>
<th data-column-id="ssex">性别</th>
<th data-column-id="sage">年龄</th>
<th data-column-id="sdept">系别</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">修改</th>
</tr>
</thead>
</table>
```
在js部分设置好就可以通过ajax来获取数据库的数据
```js
$("#grid-data").bootgrid({
ajax: true,
sorting :false,
post: function () {
/* To accumulate custom parameter with the request object */
return {
// id: "b0df252a-0d64-40e5-5555-c9e93b4befed"
};
},
url: "/admin/AllStudentUser",
formatters: {
"commands": function (column, row) {
return "<button type=\"button\" class=\"btn btn-info\" data-row-id=\"" + row.sno + "\" onclick=\"window.location.href='/admin/StudentInfo?sno=" + row.sno + "'\"><span class=\"fa fa-pencil\"></span>ÐÞ¸Ä</button>";
}
}
});
```
4. 报表
本程序使用的是在前端使用js的方式生成报表,而不是后端生成。前端通过使用tableExport来实现出报表功能,我们通过调用js语句去触发
```js
$(".table").tableExport({
type:'xlsx',
fileName:tableTitle+"_"+getNowFormatDate(),
ignoreColumn:[length],
bootstrap: true,
});
```
而且在其中我们可以设置许多自定义的设置,包括了标题、格式、行数、列数、文件名等等的设置。
4. 前端与后端的通信
4.1. 前端
第一种使用了form表单方式传递数据
```html
<form id="loginform" action="/login/signIn" method="post">
<input type="text" class="form-control" id="username" name="username" placeholder="请输入学号">
<input type="password" class="form-control" id="password" name="password" placeholder="请输入5~24位密码"/>
</form>
```
第二种采用了ajax的方法,这是一种异步传输方式,可以只刷新局部页面,可以大大的减少页面资源的消耗
```js
$.ajax({
url: URL,
aysnc: false,
type: TYPE,
contentType: "application/json; charset=utf-5",
data: PARAMS,
success: function (data) {
// return data;
return true;
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("请求失败,消息:" + textStatus + " " + errorThrown);
return false;
}
});
```
4.2. 后端
在 Spring MVC 应用程序中,RequestDispatcher (在 Front Controller 之下) 这个 servlet 负责将进入的 HTTP 请求路由到控制器的处理方法。
@RequestMapping()使用注解的方式可以将特定的请求或者请求模式映射到控制器上,然后通过简单的实体类获取前端发送的信息。
后端给前端数据的方式:
1. 通过Model(org.springframework.ui.Model),它是一个接口,包含addAttribute方法,其实现类是ExtendedModelMa
没有合适的资源?快使用搜索试试~ 我知道了~
(个人作业)基于JavaWeb的学生选课系统.zip
共199个文件
java:35个
jsp:29个
png:26个
0 下载量 59 浏览量
2024-08-25
12:55:23
上传
评论
收藏 10.4MB ZIP 举报
温馨提示
项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全栈开发),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助 【资源内容】:项目具体内容可查看/点击本页面下方的*资源详情*,包含完整源码+工程文件+说明(若有)等。【若无VIP,此资源可私信获取】 【本人专注IT领域】:有任何使用问题欢迎随时与我联系,我会及时解答,第一时间为您提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【适合场景】:相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可基于此项目来扩展开发出更多功能 #注 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担 2. 部分字体及插图等来自网络,若是侵权请联系删除,本人不对所涉及的版权问题或内容负法律责任。收取的费用仅用于整理和收集资料耗费时间的酬劳 3. 积分资源不提供使用问题指导/解答
资源推荐
资源详情
资源评论
收起资源包目录
(个人作业)基于JavaWeb的学生选课系统.zip (199个子文件)
gradlew.bat 2KB
bootstrap.css 143KB
bootstrap.min.css 118KB
bootstrap-theme.css 26KB
bootstrap-theme.min.css 23KB
bootstrap-select.css 11KB
bootstrap-select.min.css 10KB
index.css 4KB
jquery.bootgrid.css 4KB
jquery.bootgrid.min.css 4KB
index.min.css 3KB
tableexport.css 2KB
tableexport.min.css 786B
glyphicons-halflings-regular.eot 20KB
.gitattributes 378B
.gitignore 515B
build.gradle 5KB
settings.gradle 39B
gradlew 5KB
favicon.ico 4KB
spring-context-4.3.18.RELEASE.jar 1.09MB
spring-core-4.3.18.RELEASE.jar 1.08MB
spring-webmvc-4.3.18.RELEASE.jar 898KB
spring-web-4.3.18.RELEASE.jar 809KB
spring-beans-4.3.18.RELEASE.jar 746KB
spring-test-4.3.18.RELEASE.jar 590KB
spring-orm-4.3.18.RELEASE.jar 467KB
spring-websocket-4.3.18.RELEASE.jar 446KB
spring-jdbc-4.3.18.RELEASE.jar 421KB
spring-messaging-4.3.18.RELEASE.jar 380KB
spring-aop-4.3.18.RELEASE.jar 371KB
spring-jms-4.3.18.RELEASE.jar 283KB
spring-expression-4.3.18.RELEASE.jar 268KB
spring-tx-4.3.18.RELEASE.jar 262KB
spring-context-support-4.3.18.RELEASE.jar 183KB
spring-webmvc-portlet-4.3.18.RELEASE.jar 173KB
spring-oxm-4.3.18.RELEASE.jar 83KB
commons-logging-1.2.jar 60KB
spring-aspects-4.3.18.RELEASE.jar 57KB
gradle-wrapper.jar 53KB
spring-instrument-tomcat-4.3.18.RELEASE.jar 10KB
spring-instrument-4.3.18.RELEASE.jar 7KB
aopalliance-1.0.jar 4KB
WriteExcel.java 9KB
AdminController.java 8KB
LoginController.java 5KB
ReadExcel.java 5KB
InfoAdd.java 4KB
AdminRealm.java 4KB
StudentController.java 4KB
TeacherRealm.java 4KB
KickoutSessionControlFilter.java 4KB
UserServiceImpl.java 4KB
TeacherController.java 4KB
CourseServiceImpl.java 4KB
StudentRealm.java 3KB
PoiServiceImpl.java 2KB
SafeCode.java 2KB
Teacher.java 2KB
Sct.java 1KB
PageBean.java 1KB
Student.java 1KB
User.java 1KB
UserService.java 1KB
CourseList.java 1KB
CourseService.java 1KB
Course.java 924B
Department.java 641B
Admin.java 638B
PoiService.java 575B
SctMapper.java 560B
StudentMapper.java 478B
DepartmentMapper.java 442B
TeacherMapper.java 427B
CourseMapper.java 406B
AdminMapper.java 344B
CellRegion.java 223B
CourseListMapper.java 212B
preview2.jpg 968KB
preview3.jpg 309KB
preview.jpg 93KB
jquery.js 737KB
xlsx.core.min.js 446KB
bootstrap-select.js 122KB
tableExport.js 90KB
jquery.min.js 85KB
jquery.bootgrid.js 69KB
bootstrap.js 68KB
bootstrap-select.min.js 44KB
tableExport.min.js 37KB
bootstrap.min.js 36KB
jquery.bootgrid.min.js 23KB
popper.js 20KB
sha3.min.js 9KB
md5.js 9KB
checkinfo.js 7KB
md5.min.js 5KB
checkinfo.min.js 3KB
FileSaver.min.js 3KB
index.js 2KB
共 199 条
- 1
- 2
资源评论
热爱技术。
- 粉丝: 2573
- 资源: 7860
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功