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; }
时间: 2024-02-26 07:52:14 浏览: 69
这段代码用于将获取的TokenEntity信息存储到HTTP会话(Session)中,以便后续的请求可以获取用户信息。具体来说,它首先判断变量tokenEntity是否为空,如果不为空,则将TokenEntity中的userid、role、tablename、username等字段取出来,并将它们存储到HTTP会话中的相应属性中。
通过将用户信息存储到HTTP会话中,后续的请求就可以通过获取HTTP会话中的相应属性来获取用户信息,从而判断请求是否合法。
最后,返回true,表示当前请求已经通过身份认证,可以继续处理。
相关问题
解释 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")); // 跨域时会首先发送一个OPTIONS请求,这里我们给OPTIONS请求直接返回正常状态 if (request.getMethod().equals(RequestMethod.OPTIONS.name())) { response.setStatus(HttpStatus.OK.value()); return false; } 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; }
这段代码是一个Java的拦截器,用于对请求进行预处理。在这个方法中,首先设置了支持跨域请求的相关参数,然后判断是否为OPTIONS请求,如果是则直接返回正常状态。接下来判断是否有IgnoreAuth注解,如果有则直接放过,否则从请求头中获取Token,并通过TokenService验证Token的有效性。如果Token有效,则将相关信息存入Session中,否则返回401错误提示。最后,返回true或者false表示是否允许请求继续处理。
@WebServlet("/loginUrl") public class LoginController extends HttpServlet { private static final long serialVersionUID = 1L; public LoginController() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String username = request.getParameter("username"); String password = request.getParameter("password"); UserService userService = new UserService(); LoginHistoryService loginHistoryService = new LoginHistoryService(); User res = userService.loginCheck(username, password); if(res != null) { //登录成功 //添加记录 LoginHistory loginHistory = new LoginHistory(); loginHistory.setUserId(res.getUserId()); loginHistory.setIp(request.getRemoteAddr()); loginHistory.setCreateTime(new Date()); loginHistoryService.addLoginHistory(loginHistory); //跳转 request.getSession().setAttribute("loginUser", res); request.getRequestDispatcher("/mainUrl").forward(request, response); }else { //登录失败 request.setAttribute("msg", "登录失败,请检查用户名和密码是否正确!"); request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request, response); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
这是一个基于Servlet的登录控制器,处理GET请求。它从HTTP请求参数中获取用户名和密码,然后使用UserService对象调用loginCheck方法进行登录验证。如果验证通过,它将记录登录历史并将登录用户添加到会话中,然后将请求重定向到主页面。否则,它将请求转发到一个错误页面,显示登录失败的消息。
阅读全文