使用Spring和AngularJS登录单页应用程序

时间:2016-01-01 23:20:28

标签: angularjs spring spring-security

我正在创建可供未知和登录用户使用的应用程序。唯一的区别是登录用户可以使用一些其他功能,例如在数据库中保存其内容。

所有通信都基于ajax调用,因此我需要拒绝为未知用户访问后端中的某些控制器功能(端点),并且在客户端我需要知道它处于登录状态以进行设置这个额外的功能活跃。只有一个页面,登录表单应该在对话框中。我有点困惑,因为标准的Spring Security方法并不适合这种情况。我正在阅读this教程,但我无法完全理解它。

First:Principal对象有什么作用?他们使用login()函数在提交时向此端点发送凭据,但在哪里处理密码检查?如果我的用户在数据库中怎么办? Second是否可以以XML样式编写此配置?我想可以在<intercept-url/>文件中使用spring-security.xml来完成。

1 个答案:

答案 0 :(得分:-1)

  

主要对象

Principal Object用于在使用自动服务器身份验证 (即LDAP)时获取有关尝试登录的用户的基本信息。但是,您只能从主体对象获取用户名。例如,使用服务器JBoss / WildFly,您可以将服务器链接到Active Directory以允许Microsoft Windows对用户进行身份验证。

  

简单解决方案

首先,Spring Security会为您的应用程序增加额外的复杂性,因为它听起来并不像您尝试这样做。相反,请使用简单的 Servlet过滤器。如果您在JBoss / WildFly服务器上使用LDAP,则可以对j_security_check进行POST,如果提供了正确的凭据,服务器会将请求发送到过滤器。在过滤器内部,您可以使用Principal对象的getName()函数来获取用户名,以便您可以将其存储在用户的会话中。但是,如果您不使用LDAP,则可以对Java Servlet或Spring Controller(使用@RequestMapping)进行简单的POST,以尝试登录用户并将用户的信息存储在会话中。

此时,您可以过滤出允许用户查看的网址。例如,如果URL在URL的第一个目录中包含单词“administrator”,则可以限制包含/administrator/some/other/stuff.jsp的URL。