|
@@ -1,16 +1,16 @@
|
|
|
package org.jeecg.modules.shiro.authc.aop;
|
|
|
|
|
|
-import javax.servlet.ServletRequest;
|
|
|
-import javax.servlet.ServletResponse;
|
|
|
-import javax.servlet.http.HttpServletRequest;
|
|
|
-import javax.servlet.http.HttpServletResponse;
|
|
|
-import org.apache.shiro.authc.AuthenticationException;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter;
|
|
|
import org.jeecg.modules.shiro.authc.JwtToken;
|
|
|
import org.jeecg.modules.shiro.vo.DefContants;
|
|
|
import org.springframework.http.HttpStatus;
|
|
|
import org.springframework.web.bind.annotation.RequestMethod;
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
+
|
|
|
+import javax.servlet.ServletRequest;
|
|
|
+import javax.servlet.ServletResponse;
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
/**
|
|
|
* @Description: 鉴权登录拦截器
|
|
@@ -20,54 +20,64 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
@Slf4j
|
|
|
public class JwtFilter extends BasicHttpAuthenticationFilter {
|
|
|
|
|
|
- /**
|
|
|
- * 执行登录认证
|
|
|
- *
|
|
|
- * @param request
|
|
|
- * @param response
|
|
|
- * @param mappedValue
|
|
|
- * @return
|
|
|
- */
|
|
|
- @Override
|
|
|
- protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
|
|
|
- try {
|
|
|
- executeLogin(request, response);
|
|
|
- return true;
|
|
|
- } catch (Exception e) {
|
|
|
- throw new AuthenticationException("Token失效,请重新登录", e);
|
|
|
- }
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * 执行登录认证
|
|
|
+ *
|
|
|
+ * @param request
|
|
|
+ * @param response
|
|
|
+ * @param mappedValue
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
|
|
|
+
|
|
|
+ boolean successful = false;
|
|
|
+ try {
|
|
|
+ successful = executeLogin(request, response);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return successful;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ protected boolean executeLogin(ServletRequest request, ServletResponse response) throws Exception {
|
|
|
+
|
|
|
+ try {
|
|
|
+ HttpServletRequest httpServletRequest = (HttpServletRequest) request;
|
|
|
+ String token = httpServletRequest.getHeader(DefContants.X_ACCESS_TOKEN);
|
|
|
+ JwtToken jwtToken = new JwtToken(token);
|
|
|
+ // 提交给realm进行登入,如果错误他会抛出异常并被捕获
|
|
|
+ getSubject(request, response).login(jwtToken);
|
|
|
+ // 如果没有抛出异常则代表登入成功,返回true
|
|
|
+ return true;
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("登录失败");
|
|
|
|
|
|
- /**
|
|
|
- *
|
|
|
- */
|
|
|
- @Override
|
|
|
- protected boolean executeLogin(ServletRequest request, ServletResponse response) throws Exception {
|
|
|
- HttpServletRequest httpServletRequest = (HttpServletRequest) request;
|
|
|
- String token = httpServletRequest.getHeader(DefContants.X_ACCESS_TOKEN);
|
|
|
+ }
|
|
|
+ return false;
|
|
|
|
|
|
- JwtToken jwtToken = new JwtToken(token);
|
|
|
- // 提交给realm进行登入,如果错误他会抛出异常并被捕获
|
|
|
- getSubject(request, response).login(jwtToken);
|
|
|
- // 如果没有抛出异常则代表登入成功,返回true
|
|
|
- return true;
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- /**
|
|
|
- * 对跨域提供支持
|
|
|
- */
|
|
|
- @Override
|
|
|
- protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {
|
|
|
- HttpServletRequest httpServletRequest = (HttpServletRequest) request;
|
|
|
- HttpServletResponse httpServletResponse = (HttpServletResponse) response;
|
|
|
- httpServletResponse.setHeader("Access-control-Allow-Origin", httpServletRequest.getHeader("Origin"));
|
|
|
- httpServletResponse.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE");
|
|
|
- httpServletResponse.setHeader("Access-Control-Allow-Headers", httpServletRequest.getHeader("Access-Control-Request-Headers"));
|
|
|
- // 跨域时会首先发送一个option请求,这里我们给option请求直接返回正常状态
|
|
|
- if (httpServletRequest.getMethod().equals(RequestMethod.OPTIONS.name())) {
|
|
|
- httpServletResponse.setStatus(HttpStatus.OK.value());
|
|
|
- return false;
|
|
|
- }
|
|
|
- return super.preHandle(request, response);
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * 对跨域提供支持
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {
|
|
|
+ HttpServletRequest httpServletRequest = (HttpServletRequest) request;
|
|
|
+ HttpServletResponse httpServletResponse = (HttpServletResponse) response;
|
|
|
+ httpServletResponse.setHeader("Access-control-Allow-Origin", httpServletRequest.getHeader("Origin"));
|
|
|
+ httpServletResponse.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE");
|
|
|
+ httpServletResponse.setHeader("Access-Control-Allow-Headers", httpServletRequest.getHeader("Access-Control-Request-Headers"));
|
|
|
+ // 跨域时会首先发送一个option请求,这里我们给option请求直接返回正常状态
|
|
|
+ if (httpServletRequest.getMethod().equals(RequestMethod.OPTIONS.name())) {
|
|
|
+ httpServletResponse.setStatus(HttpStatus.OK.value());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return super.preHandle(request, response);
|
|
|
+ }
|
|
|
}
|