• 计算机毕业设计-招聘报名系统SpringBoot+JSP【代码讲解+安装调试+文档指导】


    🍊作者:计算机编程-吉哥

    🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。

    🍊心愿:点赞 👍 收藏 ⭐评论 📝

    🍅 文末获取源码联系

    技术选型

    springboot、mybatis、jsp、jquery、html、css、mysql、tomcat8.5、jdk1.8

    数据库表结构

    17张

    开发工具: 

    idea或者eclipse、navicat

    功能:

    【前端功能】:

    注册、登录、岗位选择、岗位报名、在线评测、个人中心、简历上传

    【后端功能】:

    登录、首页、岗位报名管理、岗位类别管理、岗位管理、用户管理、部门管理、面试进度与结果管理、招聘笔试管理、在线评测类别管理、在线评测管理

    🏆项目演示截图: 

    1、首页

    2、注册

    3、登录

    4、选择岗位

    5、岗位详情

    6、岗位报名、收藏 

    7、在线评测管理 

    8、简历管理

    9、岗位收藏

    10、报名进度

    11、岗位报名管理

    12、查看报名者简历

    13、岗位类别管理

    14、岗位管理

    15、用户管理

    16、部门管理

    17、面试进度、结果管理

    18、招聘笔试管理

    19、在线评测问题管理

     

     登录操作代码:

    【login.jsp】 

    1. <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    2. <%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
    3. <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
    4. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    5. <c:set var="contextPath" value="<%=request.getContextPath()%>">c:set>
    6. html>
    7. <html>
    8. <head>
    9. <meta charset="utf-8" />
    10. <title>招聘报名管理平台title>
    11. <link rel="stylesheet" href="${contextPath}/static/css/login.css" />
    12. <link rel="stylesheet" href="${contextPath}/static/css/bootstrap.css">
    13. <script type="text/javascript" src="${contextPath}/static/js/jquery-1.11.3.js" >script>
    14. <script type="text/javascript" src="${contextPath}/static/js/bootstrap.min.js" >script>
    15. <script type="text/javascript" src="${contextPath}/static/js/jquery.validate.js">script>
    16. <script type="text/javascript" src="${contextPath}/static/js/localization/messages_zh.js">script>
    17. <script type="text/javascript" src="${contextPath}/static/js/sweetAlert.js">script>
    18. <script type="text/javascript" src="${contextPath}/static/js/main.js">script>
    19. head>
    20. <body>
    21. <nav class="navbar navbar-default">
    22. nav>
    23. <div id="login">
    24. <p>登录p>
    25. div>
    26. <div id="container">
    27. <ul class="nav nav-tabs" role="tablist">
    28. <li role="presentation" class="active"><a href="#home" aria-controls="home" role="tab" data-toggle="tab">登录a>li>
    29. <li role="presentation"><a href="#profile" aria-controls="profile" role="tab" data-toggle="tab">验证密保a>li>
    30. <li role="presentation"><a href="#messages" aria-controls="messages" role="tab" data-toggle="tab">重置密码a>li>
    31. ul>
    32. <div class="tab-content">
    33. <div role="tabpanel" class="tab-pane active" id="home">
    34. <form method="post" action="/loginCheck">
    35. <div class="form-group">
    36. <label for="username">用户名:label>
    37. <input type="text" class="form-control" name="username" placeholder="输入你的帐号" required="required">
    38. div>
    39. <div class="form-group">
    40. <label for="exampleInputPassword1">密码:label>
    41. <input type="password" class="form-control" name="password" placeholder="输入密码" required="required">
    42. div>
    43. <c:if test="${flag eq'failed'}">
    44. <p style="color: red"><c:out value="用户名或密码错误">c:out>p>
    45. c:if>
    46. <div class="row">
    47. <div class="col-xs-6 pull_left">
    48. <div class="form-group">
    49. <input class="form-control" type="tel" id="verify_input" name="verifyInput" placeholder="请输入验证码"
    50. maxlength="4">
    51. div>
    52. div>
    53. <div class="col-xs-6 pull_left">
    54. <a href="javascript:void(0);" title="点击更换验证码">
    55. <img id="imgVerify" src="login/getVerify" alt="更换验证码" height="36" width="140"
    56. onclick="getVerify(this);">
    57. a>
    58. div>
    59. div>
    60. <c:if test="${verifyCode eq'false'}">
    61. <p style="color: red"><c:out value="验证码错误">c:out>p>
    62. <script>
    63. getVerify();
    64. script>
    65. c:if>
    66. <div class="checkbox">
    67. <label>
    68. <input type="checkbox" name="rememberMe"> 记住我
    69. label>
    70. div>
    71. <button type="submit" class="btn btn-primary" style="width: 170px;">登录button>
    72. form>
    73. div>
    74. <div role="tabpanel" class="tab-pane" id="profile">
    75. <p>请输入帐号和回答两个密保问题:p>
    76. <form id="profile1">
    77. <div class="form-group">
    78. <label for="username">请输入你的帐号:label>
    79. <input type="text" class="form-control" id="username" name="username" placeholder="张三" required="required">
    80. div>
    81. <div class="form-group">
    82. <label for="answer1">你的母亲的名字是?label>
    83. <input type="text" class="form-control" id="answer1" placeholder="张三" required="required">
    84. div>
    85. <div class="form-group">
    86. <label for="exampleInputPassword1">你的电话号码是?label>
    87. <input type="text" class="form-control" id="answer2" placeholder="1234567" required="required">
    88. div>
    89. <input type="submit" class="btn btn-primary" value="提交" style="width: 170px;"/>
    90. form>
    91. div>
    92. <div role="tabpanel" class="tab-pane" id="messages">
    93. <form id="messages1">
    94. <div class="form-group">
    95. <label for="password1">新密码label>
    96. <input type="password" class="form-control" id="password1" name="password1" placeholder="输入你的密码" required="required">
    97. div>
    98. <div class="form-group">
    99. <label for="Password2">再输入一次密码:label>
    100. <input type="password" class="form-control" id="password2" name="password2" placeholder="再输入一次密码" required="required">
    101. div>
    102. <button type="submit" class="btn btn-primary" style="width: 170px;">提交button>
    103. form>
    104. div>
    105. div>
    106. div>
    107. <div id="register">
    108. <label>欢迎使用招聘报名管理平台label>
    109. <p>您可以免费注册一个帐号,以获取更多的便利p>
    110. <a href="/register" class="btn btn-success">注册a>
    111. div>
    112. <script type="text/javascript">
    113. $('#myTabs a').click(function (e) {
    114. e.preventDefault();
    115. $(this).tab('show')
    116. })
    117. function getVerify() {
    118. $("#imgVerify").attr("src", 'login/getVerify?' + Math.random());//jquery方式
    119. }
    120. function aVerify(){
    121. var value =$("#verify_input").val();
    122. // alert(value);
    123. $.ajax({
    124. async: false,
    125. type: 'post',
    126. url: 'login/checkVerify',
    127. dataType: "json",
    128. data: {
    129. verifyInput: value
    130. },
    131. success: function (result) {
    132. if (result) {
    133. alert("success!");
    134. } else {
    135. alert("failed!");
    136. }
    137. getVerify();
    138. }
    139. });
    140. }
    141. script>
    142. body>
    143. html>

    【MainController】

    1. @PostMapping("/loginCheck")
    2. public String loginCheck(String username, String password, HttpSession session, Model model,String verifyInput){
    3. //检验验证码
    4. String originalVerify = (String)session.getAttribute(RandomValidateCodeUtil.RANDOMCODEKEY);
    5. if(!StringUtils.equals(originalVerify,verifyInput)){
    6. model.addAttribute("verifyCode","false");
    7. return "login";
    8. }
    9. UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username,password);
    10. usernamePasswordToken.setRememberMe(true);
    11. Subject subject = SecurityUtils.getSubject();
    12. try {
    13. subject.login(usernamePasswordToken);
    14. session.setAttribute("username",(String)subject.getPrincipal());
    15. model.addAttribute("username",(String)subject.getPrincipal());
    16. return "index";
    17. }catch (Exception e){
    18. model.addAttribute("flag","failed");
    19. return "login";
    20. }
    21. }

     【shiroConfig】

    1. package cn.eric.config;
    2. import java.util.LinkedHashMap;
    3. @Configuration
    4. public class ShiroConfig {
    5. @Bean
    6. public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
    7. ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
    8. shiroFilterFactoryBean.setSecurityManager(securityManager);
    9. shiroFilterFactoryBean.setLoginUrl("/login1");
    10. shiroFilterFactoryBean.setSuccessUrl("/index1");
    11. shiroFilterFactoryBean.setUnauthorizedUrl("/error1");
    12. LinkedHashMap map = new LinkedHashMap<>();
    13. map.put("/static/**", "anon");
    14. map.put("/login/getVerify", "anon");
    15. map.put("/login1", "anon");
    16. map.put("/","anon");
    17. map.put("/loginCheck", "anon");
    18. map.put("/register", "anon");
    19. map.put("/registerCheck", "anon");
    20. map.put("/checkAnswer", "anon");
    21. map.put("/changePassword", "anon");
    22. map.put("/position/**", "anon");
    23. map.put("/school/**", "anon");
    24. map.put("/index1/**", "anon");
    25. map.put("/admin/**", "authc");
    26. map.put("/**", "user");
    27. shiroFilterFactoryBean.setFilterChainDefinitionMap(map);
    28. return shiroFilterFactoryBean;
    29. }
    30. @Bean(name = "securityManager")
    31. public SecurityManager securityManager(AuthRealm authRealm,CookieRememberMeManager cookieRememberMeManager) {
    32. DefaultSecurityManager defaultSecurityManager = new DefaultWebSecurityManager();
    33. defaultSecurityManager.setRealm(authRealm);
    34. defaultSecurityManager.setRememberMeManager(cookieRememberMeManager);
    35. return defaultSecurityManager;
    36. }
    37. @Bean(name = "authRealm")
    38. public AuthRealm authRealm(CredentialMatcher credentialMatcher) {
    39. AuthRealm authRealm = new AuthRealm();
    40. authRealm.setCacheManager(new MemoryConstrainedCacheManager());
    41. authRealm.setCredentialsMatcher(credentialMatcher);
    42. return authRealm;
    43. }
    44. @Bean(name = "credentialsMatcher")
    45. public CredentialMatcher credentialsMatcher() {
    46. return new CredentialMatcher();
    47. }
    48. @Bean
    49. public AuthorizationAttributeSourceAdvisor
    50. authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
    51. AuthorizationAttributeSourceAdvisor sourceAdvisor = new AuthorizationAttributeSourceAdvisor();
    52. sourceAdvisor.setSecurityManager(securityManager);
    53. return sourceAdvisor;
    54. }
    55. @Bean
    56. public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
    57. DefaultAdvisorAutoProxyCreator creator = new DefaultAdvisorAutoProxyCreator();
    58. creator.setProxyTargetClass(true);
    59. return creator;
    60. }
    61. @Bean(name = "simpleCookie")
    62. public SimpleCookie simpleCookie() {
    63. SimpleCookie simpleCookie = new SimpleCookie();
    64. simpleCookie.setHttpOnly(true);
    65. simpleCookie.setName("helloWorld");
    66. simpleCookie.setMaxAge(2592000); //最多30天
    67. return simpleCookie;
    68. }
    69. @Bean(name = "cookieRememberMeManager")
    70. public CookieRememberMeManager cookieRememberMeManager(SimpleCookie simpleCookie){
    71. CookieRememberMeManager manager = new CookieRememberMeManager();
    72. manager.setCookie(simpleCookie);
    73. manager.setCipherKey(Base64.decode("4AvVhmFLUs0KTA3Kprsdag=="));
    74. return manager;
    75. }
    76. @Bean
    77. public FormAuthenticationFilter formAuthenticationFilter(){
    78. FormAuthenticationFilter formAuthenticationFilter = new FormAuthenticationFilter();
    79. formAuthenticationFilter.setRememberMeParam("rememberMe");
    80. return formAuthenticationFilter;
    81. }
    82. }

     【AuthRealm】

    1. public class AuthRealm extends AuthorizingRealm {
    2. @Autowired
    3. private UserService userService;
    4. @Autowired
    5. private RoleServiceImpl roleService;
    6. public String getName(){
    7. return this.getClass().getName(); // 返回类名
    8. }
    9. /**
    10. * 授权
    11. * @param principalCollection
    12. * @return
    13. */
    14. @Override
    15. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
    16. String userName = (String) principalCollection.fromRealm(this.getName()).iterator().next();
    17. User user = userService.findByUsername(userName);
    18. List roleList = Lists.newArrayList();
    19. Role roles = roleService.getRoles(user.getRoleId());
    20. if (roles == null){
    21. return null;
    22. }
    23. roleList.add(roles.getRoleName());
    24. SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
    25. info.addRoles(roleList);
    26. return info;
    27. }
    28. /**
    29. * 验证
    30. */
    31. @Override
    32. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
    33. UsernamePasswordToken token = (UsernamePasswordToken)authenticationToken;
    34. String username = token.getUsername();
    35. User user = userService.findByUsername(username);
    36. System.out.println(user);
    37. return new SimpleAuthenticationInfo(username,user.getPassword(),getName());
    38. }
    39. }

     更多项目推荐:计算机毕业设计项目

    公众号:IT跃迁谷【更多精彩文章】

    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓如果大家有任何疑虑,请在下方位置详细咨询。

  • 相关阅读:
    解密JavaScript的异步机制:打破单线程限制,提升性能与用户体验
    VS2013+Qt交互,安装详情
    如何用WebGPU流畅渲染千万级2D物体:基于光追管线
    弱网管VLAN交换机配合爱快搭建单臂路由
    2.3.C++项目:网络版五子棋对战之实用工具类模块的设计
    使用帐号登录数据提升软件用户体验
    OT:数字设定框(QSpinBox:处理整数,QDoubleSpinBox:处理浮点数)
    MAYA粒子基础_场
    vue3学习笔记(异步组件,包含defineAsyncComponent、Suspense的使用)
    激活函数总结(四十二):激活函数补充(SSFG、Gumbel Cross Entropy)
  • 原文地址:https://blog.csdn.net/weixin_51966461/article/details/126544930