当我在浏览器中键入react应用程序的任何路由时,例如:http://localhost/login,请求将命中我的服务器,而我的服务器将以401 unauthorized响应。
当请求不是授权的后端api时,我希望在react路由中处理请求。
WebSecurity配置.java:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
...
.formLogin()
.disable()
.authorizeRequests()
.antMatchers(
"/error",
"/",
"/favicon.ico",
"/static/**",
"/api/auth/**",
"/api/oauth2/**",
"/api/courses/**",
"/api/stripe/**",
"/api/lesson/content")
.permitAll()
.anyRequest()
.authenticated()
.and()
...
.exceptionHandling()
.authenticationEntryPoint(new RestAuthenticationEntryPoint())
.and();
http.addFilterBefore(tokenAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}
重新验证入口点.java:
public class RestAuthenticationEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse,
AuthenticationException e) throws IOException, ServletException {
httpServletResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED,
e.getLocalizedMessage());
}
}
是否有方法将请求转发到restauthenticationentrypoint中的index.html?
2条答案
按热度按时间dwthyt8l1#
你只需要处理一个
401
在react内:或者你可以修改你的
AuthenticationHandler
:fcipmucu2#
我决定从restauthenticationentrypoint抛出404 not found exception,因为我认为它比401 unthorized更符合这个用例:
并将未发现异常重定向到前端:
这种方法的缺点是我不能从任何控制器抛出404,因为它不会返回到前端,但我可以接受它。