基于javaweb和mysql的springboot大学生兼职系统(java+springboot+html+maven+mysql)
·
基于javaweb和mysql的springboot大学生兼职系统(java+springboot+html+maven+mysql)
私信源码获取及调试交流
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的SpringBoot大学生兼职系统(java+springboot+html+maven+mysql)
环境要求:
JDK8 mysql 5.7 maven eclipse/idea
关于数据库导入 在mysql中创建数据库test,然后在数据库下执行sql文件,即parttimeplatform.sql
数据库相关配置: 打开application.yml文件,修改所有配置中数据库的ip地址、端口号、username、password等;
@Permission
@RequestMapping("/dept_update/{deptId}")
public String deptUpdate(@PathVariable Integer deptId, Model model) {
Dept dept = deptService.selectById(deptId);
model.addAttribute(dept);
model.addAttribute("pName", ConstantFactory.me().getDeptName(dept.getPid()));
LogObjectHolder.me().set(dept);
return PREFIX + "dept_edit.html";
}
/**
* 获取部门的tree列表
*/
@RequestMapping(value = "/tree")
@ResponseBody
public List<ZTreeNode> tree() {
List<ZTreeNode> tree = this.deptService.tree();
tree.add(ZTreeNode.createParent());
return tree;
}
/**
* 新增部门
*/
@BussinessLog(value = "添加部门", key = "simplename", dict = DeptDict.class)
@RequestMapping(value = "/add")
@Permission
@ResponseBody
public Object add(Dept dept) {
if (ToolUtil.isOneEmpty(dept, dept.getSimplename())) {
throw new ServiceException(BizExceptionEnum.REQUEST_NULL);
}
//完善pids,根据pid拿到pid的pids
deptSetPids(dept);
return this.deptService.insert(dept);
}
/**
* 获取所有部门列表
*/
//缓存菜单的名称
LogObjectHolder.me().set(ConstantFactory.me().getMenuName(menuId));
this.menuService.delMenuContainSubMenus(menuId);
return SUCCESS_TIP;
}
/**
* 查看菜单
*/
@RequestMapping(value = "/view/{menuId}")
@ResponseBody
public ResponseData view(@PathVariable Long menuId) {
if (ToolUtil.isEmpty(menuId)) {
throw new ServiceException(BizExceptionEnum.REQUEST_NULL);
}
this.menuService.selectById(menuId);
return SUCCESS_TIP;
}
/**
* 获取菜单列表(首页用)
*/
@RequestMapping(value = "/menuTreeList")
@ResponseBody
public List<ZTreeNode> menuTreeList() {
return this.menuService.menuTreeList();
}
/**
* 获取菜单列表(选择父级菜单用)
*/
@RequestMapping(value = "/selectMenuTreeList")
@ResponseBody
public List<ZTreeNode> selectMenuTreeList() {
List<ZTreeNode> roleTreeList = this.menuService.menuTreeList();
roleTreeList.add(ZTreeNode.createParent());
return roleTreeList;
}
/**
* 获取角色列表
*/
return SUCCESS_TIP;
}
}
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/**
* Filter that allows access to resources if the accessor is a known user, which is defined as
* having a known principal. This means that any user who is authenticated or remembered via a
* 'remember me' feature will be allowed access from this filter.
* <p/>
* If the accessor is not a known user, then they will be redirected to the {@link #setLoginUrl(String) loginUrl}</p>
*
* @since 0.9
/**
* 系统管理员控制器
*
* @Date 2088年1月11日 下午1:08:17
*/
@Controller
@RequestMapping("/mgr")
public class UserMgrController extends BaseController {
private static String PREFIX = "/system/user/";
@Autowired
private GunsProperties gunsProperties;
@Autowired
private IUserService userService;
/**
* 跳转到查看管理员列表的页面
*/
@RequestMapping("")
public String index() {
return PREFIX + "user.html";
}
/**
* 跳转到查看管理员列表的页面
*/
@RequestMapping("/user_add")
public String addView() {
return PREFIX + "user_add.html";
}
/**
* 跳转到角色分配页面
*/
//@RequiresPermissions("/mgr/role_assign") //利用shiro自带的权限检查
@Permission
@RequestMapping("/role_assign/{userId}")
public String roleAssign(@PathVariable Integer userId, Model model) {
if (ToolUtil.isEmpty(userId)) {
throw new ServiceException(BizExceptionEnum.REQUEST_NULL);
}
User user = this.userService.selectOne(new EntityWrapper<User>().eq("id", userId));
model.addAttribute("userId", userId);
model.addAttribute("userAccount", user.getAccount());
return PREFIX + "user_roleassign.html";
@ExceptionHandler(AuthenticationException.class)
@ResponseStatus(HttpStatus.UNAUTHORIZED)
public String unAuth(AuthenticationException e) {
log.error("用户未登陆:", e);
return "/login.html";
}
/**
* 账号被冻结异常
*/
@ExceptionHandler(DisabledAccountException.class)
@ResponseStatus(HttpStatus.UNAUTHORIZED)
public String accountLocked(DisabledAccountException e, Model model) {
String username = getRequest().getParameter("username");
LogManager.me().executeLog(LogTaskFactory.loginLog(username, "账号被冻结", getIp()));
model.addAttribute("tips", "账号被冻结");
return "/login.html";
}
/**
* 账号密码错误异常
*/
@ExceptionHandler(CredentialsException.class)
@ResponseStatus(HttpStatus.UNAUTHORIZED)
public String credentials(CredentialsException e, Model model) {
String username = getRequest().getParameter("username");
LogManager.me().executeLog(LogTaskFactory.loginLog(username, "账号密码错误", getIp()));
model.addAttribute("tips", "账号密码错误");
return "/login.html";
}
/**
* 验证码错误异常
*/
@ExceptionHandler(InvalidKaptchaException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public String credentials(InvalidKaptchaException e, Model model) {
String username = getRequest().getParameter("username");
LogManager.me().executeLog(LogTaskFactory.loginLog(username, "验证码错误", getIp()));
model.addAttribute("tips", "验证码错误");
return "/login.html";
}
/**
* 无权访问该资源异常
*/
@ExceptionHandler(UndeclaredThrowableException.class)
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* 登录控制器
*
* @Date 2088年1月10日 下午8:25:24
*/
@Controller
public class LoginController extends BaseController {
/**
* 拦截业务异常
*/
@ExceptionHandler(ServiceException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
public ErrorResponseData bussiness(ServiceException e) {
LogManager.me().executeLog(LogTaskFactory.exceptionLog(ShiroKit.getUser().getId(), e));
getRequest().setAttribute("tip", e.getMessage());
log.error("业务异常:", e);
return new ErrorResponseData(e.getCode(), e.getMessage());
}
/**
* 用户未登录异常
*/
@ExceptionHandler(AuthenticationException.class)
@ResponseStatus(HttpStatus.UNAUTHORIZED)
public String unAuth(AuthenticationException e) {
log.error("用户未登陆:", e);
return "/login.html";
}
/**
* 账号被冻结异常
*/
@ExceptionHandler(DisabledAccountException.class)
@ResponseStatus(HttpStatus.UNAUTHORIZED)
public String accountLocked(DisabledAccountException e, Model model) {
String username = getRequest().getParameter("username");
LogManager.me().executeLog(LogTaskFactory.loginLog(username, "账号被冻结", getIp()));
model.addAttribute("tips", "账号被冻结");
return "/login.html";
}
/**
* 账号密码错误异常
*/
@ExceptionHandler(CredentialsException.class)
@ResponseStatus(HttpStatus.UNAUTHORIZED)
public String credentials(CredentialsException e, Model model) {
String username = getRequest().getParameter("username");
LogManager.me().executeLog(LogTaskFactory.loginLog(username, "账号密码错误", getIp()));
model.addAttribute("tips", "账号密码错误");
return "/login.html";
}
* 跳转到添加通知
*/
@RequestMapping("/notice_add")
public String noticeAdd() {
return PREFIX + "notice_add.html";
}
/**
* 跳转到修改通知
*/
@RequestMapping("/notice_update/{noticeId}")
public String noticeUpdate(@PathVariable Integer noticeId, Model model) {
Notice notice = this.noticeService.selectById(noticeId);
model.addAttribute("notice", notice);
LogObjectHolder.me().set(notice);
return PREFIX + "notice_edit.html";
}
/**
* 跳转到首页通知
*/
@RequestMapping("/hello")
public String hello() {
List<Map<String, Object>> notices = noticeService.list(null);
super.setAttr("noticeList", notices);
return "/blackboard.html";
}
/**
* 获取通知列表
*/
@RequestMapping(value = "/list")
@ResponseBody
public Object list(String condition) {
List<Map<String, Object>> list = this.noticeService.list(condition);
return super.warpObject(new NoticeWrapper(list));
}
/**
* 新增通知
*/
@RequestMapping(value = "/add")
@ResponseBody
@BussinessLog(value = "新增通知", key = "title", dict = NoticeMap.class)
public Object add(Notice notice) {
if (ToolUtil.isOneEmpty(notice, notice.getTitle(), notice.getContent())) {
throw new ServiceException(BizExceptionEnum.REQUEST_NULL);
}
notice.setCreater(ShiroKit.getUser().getId());
* and then immediately returns <code>false</code>, thereby preventing the chain from continuing so the redirect may
* execute.
*/
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
HttpServletRequest httpServletRequest = WebUtils.toHttp(request);
HttpServletResponse httpServletResponse = WebUtils.toHttp(response);
/**
* 如果是ajax请求则不进行跳转
*/
if (httpServletRequest.getHeader("x-requested-with") != null
&& httpServletRequest.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {
httpServletResponse.setHeader("sessionstatus", "timeout");
return false;
} else {
/**
* 第一次点击页面
*/
String referer = httpServletRequest.getHeader("Referer");
if (referer == null) {
saveRequestAndRedirectToLogin(request, response);
return false;
} else {
/**
* 从别的页面跳转过来的
*/
if (ShiroKit.getSession().getAttribute("sessionFlag") == null) {
httpServletRequest.setAttribute("tips", "session超时");
httpServletRequest.getRequestDispatcher("/login").forward(request, response);
return false;
} else {
saveRequestAndRedirectToLogin(request, response);
return false;
}
}
}
}
}
/**
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
/**
* 验证码生成
*
*/
@Controller
@RequestMapping("/kaptcha")
public class KaptchaController {
@Autowired
private GunsProperties gunsProperties;
@Autowired
private Producer producer;
/**
* 生成验证码
*/
@RequestMapping("")
public void index(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
response.setDateHeader("Expires", 0);
// Set standard HTTP/1.1 no-cache headers.
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
// Set standard HTTP/1.0 no-cache header.
response.setHeader("Pragma", "no-cache");
// return a jpeg
response.setContentType("image/jpeg");
*/
@RequestMapping(value = "/update")
@ResponseBody
public Object update(Advertisement advertisement) {
advertisementService.updateById(advertisement);
return SUCCESS_TIP;
}
/**
* 广告管理详情
*/
@RequestMapping(value = "/detail/{advertisementId}")
@ResponseBody
public Object detail(@PathVariable("advertisementId") Integer advertisementId) {
return advertisementService.selectById(advertisementId);
}
}
/**
* 招聘者控制器
*
*/
@Controller
@RequestMapping("/recruiter")
public class RecruiterController extends BaseController {
private String PREFIX = "/system/recruiter/";
@Autowired
private IRecruiterService recruiterService;
*/
@RequestMapping("")
public String index() {
return PREFIX + "notice.html";
}
/**
* 跳转到添加通知
*/
@RequestMapping("/notice_add")
public String noticeAdd() {
return PREFIX + "notice_add.html";
}
/**
* 跳转到修改通知
*/
@RequestMapping("/notice_update/{noticeId}")
public String noticeUpdate(@PathVariable Integer noticeId, Model model) {
Notice notice = this.noticeService.selectById(noticeId);
model.addAttribute("notice", notice);
LogObjectHolder.me().set(notice);
return PREFIX + "notice_edit.html";
}
/**
* 跳转到首页通知
*/
@RequestMapping("/hello")
public String hello() {
List<Map<String, Object>> notices = noticeService.list(null);
super.setAttr("noticeList", notices);
return "/blackboard.html";
}
/**
* 获取通知列表
*/
@RequestMapping(value = "/list")
@ResponseBody
public Object list(String condition) {
List<Map<String, Object>> list = this.noticeService.list(condition);
return super.warpObject(new NoticeWrapper(list));
}
/**
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* 接口控制器提供
*
*/
@RestController
@RequestMapping("/gunsApi")
public class ApiController extends BaseController {
@Autowired
private UserMapper userMapper;
Dept temp = deptService.selectById(pid);
String pids = temp.getPids();
dept.setPid(pid);
dept.setPids(pids + "[" + pid + "],");
}
}
}
/**
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 返回图片
*
* @Date 2088/5/24 23:00
*/
@RequestMapping("/{pictureId}")
public void renderPicture(@PathVariable("pictureId") String pictureId, HttpServletResponse response) {
String path = gunsProperties.getFileUploadPath() + pictureId;
try {
byte[] bytes = FileUtil.toByteArray(path);
response.getOutputStream().write(bytes);
} catch (Exception e) {
//如果找不到图片就返回一个默认图片
try {
response.sendRedirect("/static/img/girl.gif");
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
/**
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* 跳转到首页通知
*/
@RequestMapping("/hello")
public String hello() {
List<Map<String, Object>> notices = noticeService.list(null);
super.setAttr("noticeList", notices);
return "/blackboard.html";
}
/**
* 获取通知列表
*/
@RequestMapping(value = "/list")
@ResponseBody
public Object list(String condition) {
List<Map<String, Object>> list = this.noticeService.list(condition);
return super.warpObject(new NoticeWrapper(list));
}
/**
* 新增通知
*/
@RequestMapping(value = "/add")
@ResponseBody
@BussinessLog(value = "新增通知", key = "title", dict = NoticeMap.class)
public Object add(Notice notice) {
if (ToolUtil.isOneEmpty(notice, notice.getTitle(), notice.getContent())) {
throw new ServiceException(BizExceptionEnum.REQUEST_NULL);
}
notice.setCreater(ShiroKit.getUser().getId());
notice.setCreatetime(new Date());
notice.insert();
return SUCCESS_TIP;
}
/**
* 删除通知
*/
@RequestMapping(value = "/delete")
@ResponseBody
@BussinessLog(value = "删除通知", key = "noticeId", dict = NoticeMap.class)
public Object delete(@RequestParam Integer noticeId) {
//缓存通知名称
LogObjectHolder.me().set(ConstantFactory.me().getNoticeTitle(noticeId));
this.noticeService.deleteById(noticeId);
return SUCCESS_TIP;
}
/**
* 跳转到兼职任务首页
*/
@RequestMapping("")
public String index() {
return PREFIX + "position.html";
}
/**
* 跳转到添加兼职任务
*/
@RequestMapping("/position_add")
public String positionAdd() {
return PREFIX + "position_add.html";
}
/**
* 跳转到修改兼职任务
*/
@RequestMapping("/position_update/{positionId}")
public String positionUpdate(@PathVariable Integer positionId, Model model) {
Position position = positionService.selectById(positionId);
model.addAttribute("item",position);
model.addAttribute("jobTypeName", ConstantFactory.me().getJobTypeName(position.getType()));
LogObjectHolder.me().set(position);
LogObjectHolder.me().set(position.getType());
return PREFIX + "position_edit.html";
}
/**
* 获取兼职任务列表
*/
@RequestMapping(value = "/list")
@ResponseBody
public Object list(String condition) {
List<Map<String, Object>> positions = positionService.selectPositions(condition);
return new PositionWarper(positions).wrap();
}
/**
* 新增兼职任务
*/
@RequestMapping(value = "/add")
@ResponseBody
/**
* 上传图片
*/
@RequestMapping(method = RequestMethod.POST, path = "/upload")
@ResponseBody
public String upload(@RequestPart("file") MultipartFile picture) {
String pictureName = UUID.randomUUID().toString() + "." + ToolUtil.getFileSuffix(picture.getOriginalFilename());
try {
String fileSavePath = gunsProperties.getFileUploadPath();
System.err.println("--------------"+fileSavePath+"=========" + (fileSavePath + pictureName));
picture.transferTo(new File(fileSavePath + pictureName));
} catch (Exception e) {
throw new ServiceException(BizExceptionEnum.UPLOAD_ERROR);
}
return pictureName;
}
/**
* 判断当前登录的用户是否有操作这个用户的权限
*/
private void assertAuth(Integer userId) {
if (ShiroKit.isAdmin()) {
return;
}
List<Integer> deptDataScope = ShiroKit.getDeptDataScope();
User user = this.userService.selectById(userId);
Integer deptid = user.getDeptid();
if (deptDataScope.contains(deptid)) {
return;
} else {
throw new ServiceException(BizExceptionEnum.NO_PERMITION);
}
}
}
/**
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,






更多推荐




所有评论(0)