项目介绍
本系统采用SSM框架,数据层采用mybatis,数据库使用mysql,
适合选题:适合就业 招聘
项目技术:
后端:spring SpringMVC,mybatis
前端:jsp、js、css等
开发工具:idea/eclipse
数据库:mysql 5.7
JDK版本:jdk1.8
功能概述
本系统主要分为网站和管理系统 网站主要功能如下
前端主要包含:
- 登陆 注册
- 招聘信息:可以查看招聘信息,并投递简历
- 投递简历:可以对心意的企业进行简历投递
- 新闻资讯:查看相关就业咨询
后端主要功能:
- 学生管理:对学生信息进行管理
- 教师管理:对就业教师进行管理
- 企业管理:企业可以添加招聘信息、面试邀请等
- 面试管理
部分功能展示
实现代码
创建数据库表
CREATE TABLE `users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`username` varchar(100) NOT NULL COMMENT '用户名',
`password` varchar(100) NOT NULL COMMENT '密码',
`role` varchar(100) DEFAULT '管理员' COMMENT '角色',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='用户表';
CREATE TABLE `toudidejianli` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`xuejihao` varchar(200) DEFAULT NULL COMMENT '学籍号',
`xueshengxingming` varchar(200) DEFAULT NULL COMMENT '学生姓名',
`xueli` varchar(200) DEFAULT NULL COMMENT '学历',
`zhuanye` varchar(200) DEFAULT NULL COMMENT '专业',
`xingbie` varchar(200) DEFAULT NULL COMMENT '性别',
`shenfenzheng` varchar(200) DEFAULT NULL COMMENT '身份证',
`zhaopian` varchar(200) DEFAULT NULL COMMENT '照片',
`chushengriqi` date DEFAULT NULL COMMENT '出生日期',
`gongsimingcheng` varchar(200) DEFAULT NULL COMMENT '公司名称',
`qiuzhigangwei` varchar(200) DEFAULT NULL COMMENT '求职岗位',
`gongzuodidian` varchar(200) DEFAULT NULL COMMENT '工作地点',
`qiwangxinzi` int(11) DEFAULT NULL COMMENT '期望薪资',
`jiaoyubeijing` varchar(200) DEFAULT NULL COMMENT '教育背景',
`huojiangzhengshu` varchar(200) DEFAULT NULL COMMENT '获奖证书',
`biyexuexiao` varchar(200) DEFAULT NULL COMMENT '毕业学校',
`xiangxineirong` longtext COMMENT '详细内容',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1616923190526 DEFAULT CHARSET=utf8 COMMENT='投递的简历';
CREATE TABLE `zhaopinxinxi` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`zhaopinbianhao` varchar(200) DEFAULT NULL COMMENT '招聘编号',
`qiyezhanghao` varchar(200) DEFAULT NULL COMMENT '企业账号',
`qiyemingcheng` varchar(200) DEFAULT NULL COMMENT '企业名称',
`lianxifangshi` varchar(200) DEFAULT NULL COMMENT '联系方式',
`youxiang` varchar(200) DEFAULT NULL COMMENT '邮箱',
`zhaopinrenshu` varchar(200) DEFAULT NULL COMMENT '招聘人数',
`zhaopingangwei` varchar(200) DEFAULT NULL COMMENT '招聘岗位',
`tupian` varchar(200) DEFAULT NULL COMMENT '图片',
`zhiweiyaoqiu` longtext COMMENT '职位要求',
`gongzidaiyu` longtext COMMENT '工资待遇',
`sfsh` varchar(200) DEFAULT '否' COMMENT '是否审核',
`shhf` longtext COMMENT '审核回复',
PRIMARY KEY (`id`),
UNIQUE KEY `zhaopinbianhao` (`zhaopinbianhao`)
) ENGINE=InnoDB AUTO_INCREMENT=1616923548124 DEFAULT CHARSET=utf8 COMMENT='招聘信息';
CREATE TABLE `jiuyedaoshi` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`jiaoshigonghao` varchar(200) NOT NULL COMMENT '教师工号',
`mima` varchar(200) DEFAULT NULL COMMENT '密码',
`jiaoshixingming` varchar(200) NOT NULL COMMENT '教师姓名',
`xingbie` varchar(200) DEFAULT NULL COMMENT '性别',
`zhicheng` varchar(200) DEFAULT NULL COMMENT '职称',
`dianhua` varchar(200) DEFAULT NULL COMMENT '电话',
`youxiang` varchar(200) DEFAULT NULL COMMENT '邮箱',
`zhaopian` varchar(200) DEFAULT NULL COMMENT '照片',
`sfsh` varchar(200) DEFAULT '否' COMMENT '是否审核',
`shhf` longtext COMMENT '审核回复',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1616922876852 DEFAULT CHARSET=utf8 COMMENT='就业导师';
CREATE TABLE `news` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`title` varchar(200) NOT NULL COMMENT '标题',
`introduction` longtext COMMENT '简介',
`picture` varchar(200) NOT NULL COMMENT '图片',
`content` longtext NOT NULL COMMENT '内容',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=87 DEFAULT CHARSET=utf8 COMMENT='就业资讯';
核心代码
/**
* 登录
*/
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null) {
return R.error("账号不存在");
}
user.setPassword("123456");
userService.update(user,null);
return R.ok("密码已重置为:123456");
}
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/list")
public R list( UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", userService.selectListView(ew));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
return R.error("用户名已存在。");
}
userService.updateById(user);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,NewsEntity news,
HttpServletRequest request){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( NewsEntity news){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
ew.allEq(MPUtil.allEQMapPre( news, "news"));
return R.ok().put("data", newsService.selectListView(ew));
}
权限认证
/**
* 权限(Token)验证
*/
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {
public static final String LOGIN_TOKEN_KEY = "Token";
@Autowired
private TokenService tokenService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//支持跨域请求
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
IgnoreAuth annotation;
if (handler instanceof HandlerMethod) {
annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
} else {
return true;
}
//从header中获取token
String token = request.getHeader(LOGIN_TOKEN_KEY);
/**
* 不需要验证权限的方法直接放过
*/
if(annotation!=null) {
return true;
}
TokenEntity tokenEntity = null;
if(StringUtils.isNotBlank(token)) {
tokenEntity = tokenService.getTokenEntity(token);
}
if(tokenEntity != null) {
request.getSession().setAttribute("userId", tokenEntity.getUserid());
request.getSession().setAttribute("role", tokenEntity.getRole());
request.getSession().setAttribute("tableName", tokenEntity.getTablename());
request.getSession().setAttribute("username", tokenEntity.getUsername());
return true;
}
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
try {
writer = response.getWriter();
writer.print(JSONObject.toJSONString(R.error(401, "请先登录")));
} finally {
if(writer != null){
writer.close();
}
}
// throw new EIException("请先登录", 401);
return false;
}
}
本文含有隐藏内容,请 开通VIP 后查看