@@ -79,22 +79,21 @@ protected boolean isAccessAllowed(ServletRequest request, ServletResponse respon
7979 一般使用第二种(更方便)
8080 */
8181 // 直接返回Response信息
82- this .response401 (request , response , msg );
82+ this .response401 (response , msg );
8383 return false ;
8484 }
8585 } else {
8686 // 没有携带Token
87- HttpServletRequest httpRequest = WebUtils .toHttp (request );
87+ HttpServletRequest httpServletRequest = WebUtils .toHttp (request );
8888 // 获取当前请求类型
89- String httpMethod = httpRequest .getMethod ();
89+ String httpMethod = httpServletRequest .getMethod ();
9090 // 获取当前请求URI
91- String requestURI = httpRequest .getRequestURI ();
91+ String requestURI = httpServletRequest .getRequestURI ();
9292 LOGGER .info ("当前请求 {} Authorization属性(Token)为空 请求类型 {}" , requestURI , httpMethod );
93-
9493 // mustLoginFlag = true 开启任何请求必须登录才可访问
9594 Boolean mustLoginFlag = false ;
9695 if (mustLoginFlag ) {
97- this .response401 (request , response , "请先登录" );
96+ this .response401 (response , "请先登录" );
9897 return false ;
9998 }
10099 }
@@ -135,6 +134,24 @@ protected boolean executeLogin(ServletRequest request, ServletResponse response)
135134 return true ;
136135 }
137136
137+ /**
138+ * 对跨域提供支持
139+ */
140+ @ Override
141+ protected boolean preHandle (ServletRequest request , ServletResponse response ) throws Exception {
142+ HttpServletRequest httpServletRequest = WebUtils .toHttp (request );
143+ HttpServletResponse httpServletResponse = WebUtils .toHttp (response );
144+ httpServletResponse .setHeader ("Access-control-Allow-Origin" , httpServletRequest .getHeader ("Origin" ));
145+ httpServletResponse .setHeader ("Access-Control-Allow-Methods" , "GET,POST,OPTIONS,PUT,DELETE" );
146+ httpServletResponse .setHeader ("Access-Control-Allow-Headers" , httpServletRequest .getHeader ("Access-Control-Request-Headers" ));
147+ // 跨域时会首先发送一个OPTIONS请求,这里我们给OPTIONS请求直接返回正常状态
148+ if (httpServletRequest .getMethod ().equals (RequestMethod .OPTIONS .name ())) {
149+ httpServletResponse .setStatus (HttpStatus .OK .value ());
150+ return false ;
151+ }
152+ return super .preHandle (request , response );
153+ }
154+
138155 /**
139156 * 此处为AccessToken刷新,进行判断RefreshToken是否过期,未过期就返回新的AccessToken且继续正常访问
140157 */
@@ -163,7 +180,7 @@ private boolean refreshToken(ServletRequest request, ServletResponse response) {
163180 // 提交给UserRealm进行认证,如果错误他会抛出异常并被捕获,如果没有抛出异常则代表登入成功,返回true
164181 this .getSubject (request , response ).login (jwtToken );
165182 // 最后将刷新的AccessToken存放在Response的Header中的Authorization字段返回
166- HttpServletResponse httpServletResponse = ( HttpServletResponse ) response ;
183+ HttpServletResponse httpServletResponse = WebUtils . toHttp ( response ) ;
167184 httpServletResponse .setHeader ("Authorization" , token );
168185 httpServletResponse .setHeader ("Access-Control-Expose-Headers" , "Authorization" );
169186 return true ;
@@ -175,8 +192,8 @@ private boolean refreshToken(ServletRequest request, ServletResponse response) {
175192 /**
176193 * 无需转发,直接返回Response信息
177194 */
178- private void response401 (ServletRequest req , ServletResponse resp , String msg ) {
179- HttpServletResponse httpServletResponse = ( HttpServletResponse ) resp ;
195+ private void response401 (ServletResponse response , String msg ) {
196+ HttpServletResponse httpServletResponse = WebUtils . toHttp ( response ) ;
180197 httpServletResponse .setStatus (HttpStatus .UNAUTHORIZED .value ());
181198 httpServletResponse .setCharacterEncoding ("UTF-8" );
182199 httpServletResponse .setContentType ("application/json; charset=utf-8" );
@@ -188,22 +205,4 @@ private void response401(ServletRequest req, ServletResponse resp, String msg) {
188205 throw new CustomException ("直接返回Response信息出现IOException异常:" + e .getMessage ());
189206 }
190207 }
191-
192- /**
193- * 对跨域提供支持
194- */
195- @ Override
196- protected boolean preHandle (ServletRequest request , ServletResponse response ) throws Exception {
197- HttpServletRequest httpServletRequest = (HttpServletRequest ) request ;
198- HttpServletResponse httpServletResponse = (HttpServletResponse ) response ;
199- httpServletResponse .setHeader ("Access-control-Allow-Origin" , httpServletRequest .getHeader ("Origin" ));
200- httpServletResponse .setHeader ("Access-Control-Allow-Methods" , "GET,POST,OPTIONS,PUT,DELETE" );
201- httpServletResponse .setHeader ("Access-Control-Allow-Headers" , httpServletRequest .getHeader ("Access-Control-Request-Headers" ));
202- // 跨域时会首先发送一个OPTIONS请求,这里我们给OPTIONS请求直接返回正常状态
203- if (httpServletRequest .getMethod ().equals (RequestMethod .OPTIONS .name ())) {
204- httpServletResponse .setStatus (HttpStatus .OK .value ());
205- return false ;
206- }
207- return super .preHandle (request , response );
208- }
209208}
0 commit comments