如何处理401和8角Spring Boot

hujrc8aj  于 2021-07-22  发布在  Java
关注(0)|答案(1)|浏览(292)

我想能够处理401和显示一个特定的Angular 8页,但目前只显示index.html文件
注意事项
angular是SpringBoot的视图,因此它不是一个单独的应用程序
我没有使用spring security。我只是在spring中使用过滤器来确定是否需要授权
这是我的过滤器。

@Component
public class CustomSessionFilter extends OncePerRequestFilter {
       protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {

        HttpServletRequest req = (HttpServletRequest) httpServletRequest;
        if (!req.getRequestURI().startsWith("/sample/path")){
                HttpServletResponse httpResponse = (HttpServletResponse) httpServletResponse;
                httpResponse.setContentType("application/json");
                httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");
                return;
            }
}

也许我有一个控制器可以扩展errorcontroller

@CrossOrigin
@RestController
public class IndexController implements ErrorController {

    private static final String PATH = "/error";

    @RequestMapping(value = PATH)
    public ModelAndView saveLeadQuery() {
        return new ModelAndView("forward:/");
    }

    @Override
    public String getErrorPath() {
        return PATH;
    }
}

编辑:我没有使用springsecurity,因为我不需要登录,我只需要通过特定的路径进行身份验证。。应用程序没有用户

iqjalb3h

iqjalb3h1#

我只想把我的0.02美元放在这里。为了保护应用程序中的路由,您可以创建一个扩展websecurityconfigureradapter的安全配置,在这里您可以通过antmatcher或mvcmathchers保护某些路由(建议使用第二个)。此外,您可以在那里声明一组角色或条件(通过spring表达式语言),如果没有访问权限的用户试图访问路由,这些角色或条件将自动抛出401错误。更多你可以在这里找到的https://www.baeldung.com/security-spring
至于errorcontroller,我相信控制器建议将更适合这个用例。它几乎截取了您声明的所有错误,并可以返回更多信息和通用的响应:)更多关于这方面的信息https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
作为

相关问题