用户登录通过账号、密码页面,进入到系统小程序主界面,进入到操作界面,进行相对应操作,如下图所示。

java设置范围打卡 java实现考勤打卡_Java

学生登录系统后,可以对首页、公告信息、我的等功能进行详细操作,如下图所示。

java设置范围打卡 java实现考勤打卡_java设置范围打卡_02

找工作申报,在找工作申报页面学生可以申报自己的工作信息,然后等待管理员审核回复,并可以查看自己的找工作申报信息,包括学生姓名、学号、头像、班级、年级、专业、公司名称、公司地址、出发日期、结束日期、申报时间、备注、行程、审核回复等,如下图所示。

java设置范围打卡 java实现考勤打卡_面试_03

实习打卡管理,在实习打卡管理页面学生可以填写打卡信息,包括了学号、学生姓名、头像、班级、年级、专业、单位名称、单位地址、打卡类型、打卡时间、备注等信息,如下图所示。

java设置范围打卡 java实现考勤打卡_面试_04

我的,在我的页面可以查看实习打卡、考研申报、找工作申报等详细信息进行操作,如下图所示。

java设置范围打卡 java实现考勤打卡_java设置范围打卡_05

5.2后台管理端实现效果

管理员登录,管理员通过登录页面输入用户名、密码,选择角色并点击登录操作,如下图所示。

java设置范围打卡 java实现考勤打卡_java_06

管理员登录系统后,可以对首页、个人中心、学生管理、实习单位管理、实习打卡管理、考研申报管理、找工作申报管理、系统管理等功能进行相应操作,如下图所示。

java设置范围打卡 java实现考勤打卡_面试_07


java设置范围打卡 java实现考勤打卡_Java_08


java设置范围打卡 java实现考勤打卡_面试_09

六.部分功能代码

/\*\*
 \* 权限(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 {


        String servletPath = request.getServletPath();
        if("/dictionary/page".equals(request.getServletPath())  || "/file/upload".equals(request.getServletPath()) || "/yonghu/register".equals(request.getServletPath()) ){//请求路径是字典表或者文件上传 直接放行
            return true;
        }
        //支持跨域请求
		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;
    }
}