java - Spring Boot 和 Angular 身份验证 - 如何保护应用程序?

标签 java angular spring

所以我让这个遗留应用程序运行 spring MVC 和 JSP,从 mongo DB 读取
,我正在考虑将其替换为使用 Spring Boot 和 angular JS 的现代应用程序
我不是在寻找框架,我的问题更多是关于身份验证的概念,以及它如何在 angular 和 Spring boot 之间工作。
我不想使用第三方进行身份验证,我想继续使用我的内部数据库用户和密码。
我还有一个rest API,客户端需要先注册,然后在绕过 Angular 和身份验证的每个请求上发送一个 token 。
所以在过去(古老的 j2ee )我有 Servlet 过滤器,这个过滤器 war 在任何请求上运行,它检查 session 是否经过身份验证,如果没有 - 它会转发到身份验证页面,然后将结果存储在 session 中。
类似的东西:

@WebFilter("/*")
public class LoginFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {    
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        HttpSession session = request.getSession(false);
        String loginURI = request.getContextPath() + "/login";

        boolean loggedIn = session != null && session.getAttribute("user") != null;
        boolean loginRequest = request.getRequestURI().equals(loginURI);

        if (loggedIn || loginRequest) {
            chain.doFilter(request, response);
        } else {
            response.sendRedirect(loginURI);
        }
    }

    // ...
}
如何使用 angular JS 进行相同的身份验证机制?
什么是 servlet 中的过滤器?
由于 Angular 是客户端渲染,如何保护它?
感谢您的任何意见!

最佳答案

明显的想法:https://spring.io/guides/tutorials/spring-security-and-angular-js/
如果您尝试使用静态资源在同一端口上提供 angular 服务,您将很难使用 spring boot 设置它,因为在谁应该解决特定资源方面存在冲突:angular 还是 spring boot。例如:/home可以通过 angular 解决,但 spring 不知道存在 /home 的事实。如果你点击 /home直接,除非 index.html,否则它不会通过 angular 解决已加载,您将看到一个 404 Whitelabel 页面。
如果您在不同的端口上提供 angular 和 spring 引导,那么您必须阅读上述 spring 指南中的引用:

You can’t have a secure, stateless application.


添加到什么 Hopey One已经指出:使用 JHipster没有你想的那么糟糕。构建 80% 的项目几乎不需要一天的时间,然后您可以相应地调整其余的 20%。它将解决大部分知识空白,并让您编写实际需要的代码。并且由于您已经有一个正在运行的应用程序,因此大部分工作都是复制粘贴工作。您可以阅读 this guide来设置环境。

关于java - Spring Boot 和 Angular 身份验证 - 如何保护应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65690415/

相关文章:

Java : JLabel with text and icon

java - 交换链表节点后递归 toString 函数的堆栈溢出

angular - 具有名称的表单控件没有值访问器...用于垫选择控件

dependency-injection - Angular 2 : Dynamic Component Loader and injection

javascript - 使用 Spring MVC 将值从 AJAX 传递到 Controller

java - Tomcat Maven-无法启动组件问题

java - 解析 XML 仅获取注释和日期值

angular - 清除 ionic 选择选项

Spring Boot 2.2.1 RELEASE构建错误相对路径

java - 如何连接两个表并将其用作jpa存储库