package com.interceptor; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; import com.annotation.IgnoreAuth; import com.entity.EIException; import com.entity.TokenEntity; import com.service.TokenService; import com.utils.R; /** * 权限(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; } }
时间: 2024-02-29 08:54:34 浏览: 16
这段代码是一个Spring Boot应用程序中的拦截器,用于验证用户的Token令牌是否有效。它会在每个请求之前拦截并验证Token,如果Token有效则允许请求继续进行,否则返回一个401错误并提示用户先登录。其中,@IgnoreAuth注解表示该请求不需要验证Token。这段代码还支持跨域请求,设置了一些CORS相关的header信息。
相关问题
com.hms.common.interceptor.logininterceptor
com.hms.common.interceptor.logininterceptor是一个拦截器,用于在用户访问网站时进行身份认证和权限验证。它是一个Java类,位于com.hms.common.interceptor包中。其主要作用是在用户请求到达控制器前进行拦截,检查用户是否已经登录,并且是否具有访问该资源的权限。
在具体的实现过程中,该拦截器会先判断用户是否已经登录,如果没有登录,则会将请求重定向到登录页面;如果用户已经登录,则会检查用户是否具有访问该资源的权限,若没有权限,则会给出相应的提示信息,并阻止用户访问该资源。
使用com.hms.common.interceptor.logininterceptor可以有效地保护网站的安全性,避免未授权的访问和操作。此外,该拦截器还可以记录用户的登录信息、访问日志等,为网站管理提供重要的参考信息。
java: 程序包org.apache.struts2.interceptor不存在
这种错误通常表示您的项目缺少Struts2依赖项或配置不正确。请确保您的项目中包含了Struts2的jar文件,并且在您的struts.xml文件中正确配置了拦截器。如果您使用的是Maven,则可以在pom.xml文件中添加以下依赖项:
```
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.x.x</version>
</dependency>
```
如果您已经添加了这个依赖项并且仍然遇到这个错误,请确保您的项目的classpath正确设置,以包含Struts2的jar文件。