Spring Security登录

1.简介

本文将重点介绍使用Spring Security登录 。 我们将在前面的简单Spring MVC示例的基础上构建,因为这是设置Web应用程序和登录机制的必要部分。

2. Maven依赖

要将Maven依赖项添加到项目中,请参阅Spring Security with Maven文章 。 标准的spring-security-webspring-security-config都是必需的。

3.

web.xml中的Spring Security配置很简单–仅向标准Spring MVC web.xml中添加了一个额外的过滤器:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://java.sun.com/xml/ns/javaee" 
   xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   xsi:schemaLocation="
      http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
   id="WebApp_ID" version="3.0">

   <display-name>Spring Secured Application</display-name>

   <!-- Spring MVC -->
   <servlet>
      <servlet-name>mvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
      <servlet-name>mvc</servlet-name>
      <url-pattern>/</url-pattern>
   </servlet-mapping>

   <context-param>
      <param-name>contextClass</param-name>
      <param-value>
         org.springframework.web.context.support.AnnotationConfigWebApplicationContext
      </param-value>
   </context-param>
   <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>org.baeldung.spring.web.config</param-value>
   </context-param>
   <listener>
      <listener-class>
         org.springframework.web.context.ContextLoaderListener
      </listener-class>
   </listener>

   <!-- Spring Security -->
   <filter>
      <filter-name>springSecurityFilterChain</filter-name>
      <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
   </filter>
   <filter-mapping>
      <filter-name>springSecurityFilterChain</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>

</web-app>

过滤器-DelegatingFilterProxy-简单地委派给Spring托管的bean – FilterChainProxy-它本身可以从完整的Spring bean生命周期管理等中受益。

2. Spring Security配置

Spring配置大部分是用Java编写的,但是Spring Security配置尚不支持完整的Java,并且在大多数情况下仍需要为XML。 目前正在努力为Spring Security添加基于Java的配置 ,但这还不成熟。

整个项目使用的是Java配置,因此需要通过Java @Configuration类导入XML配置文件:

@Configuration
@ImportResource({ "classpath:webSecurityConfig.xml" })
public class SecSecurityConfig {
   public SecSecurityConfig() {
      super();
   }
}

Spring Security XML配置– webSecurityConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:beans="http://www.springframework.org/schema/beans"
  xsi:schemaLocation="
      http://www.springframework.org/schema/security 
      http://www.springframework.org/schema/security/spring-security-3.1.xsd
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">

   <http use-expressions="true">
      <intercept-url pattern="/login*" access="isAnonymous()" />
      <intercept-url pattern="/**" access="isAuthenticated()"/>

      <form-login 
         login-page='/login.html' 
         default-target-url="/homepage.html" 
         authentication-failure-url="/login.html?error=true" />

      <logout logout-success-url="/login.html" />

   </http>
   <authentication-manager>
      <authentication-provider>
         <user-service>
            <user name="user1" password="user1Pass" authorities="ROLE_USER" />
         </user-service>
      </authentication-provider>
   </authentication-manager>
</beans:beans>
2.1。 <intercept-url>

我们允许对/ login进行匿名访问,以便用户可以进行身份​​验证。 我们也在确保其他一切。

请注意, <intercept-url>元素的顺序很重要-首先需要制定更具体的规则,然后是更通用的规则。

2.2。 <表单登录>
  • 登录页面自定义登录页面
  • default-target-url-成功登录后的登录页面
  • authentication-failure-url –登录失败后的登录页面
2.3。 <身份验证管理器>

身份验证提供程序由简单的内存实现(特别是InMemoryUserDetailsManager )支持,以纯文本配置。 它仅在Spring 3.1及更高版本中存在,并且在尚不需要完全持久性机制的情况下,可用于快速原型制作。

3.登录表单

登录表单页面将使用简单的机制向Spring MVC注册,该机制将视图名称映射到URL ,而无需在两者之间使用显式控制器:

registry.addViewController("/login.html");

当然,这对应于login.jsp

<html>
<head></head>
<body>
   <h1>Login</h1>
   <form name='f' action="j_spring_security_check" method='POST'>
      <table>
         <tr>
            <td>User:</td>
            <td><input type='text' name='j_username' value=''></td>
         </tr>
         <tr>
            <td>Password:</td>
            <td><input type='password' name='j_password' /></td>
         </tr>
         <tr>
            <td><input name="submit" type="submit" value="submit" /></td>
         </tr>
      </table>
  </form>
</body>
</html>

Spring登录表单具有以下相关工件:

  • j_spring_security_check –表单在其中张贴以触发身份验证过程的URL
  • j_username –用户名
  • j_password –密码

4.进一步配置Spring登录

当我们在上面介绍了Spring Security XML Configuration时,我们简要讨论了登录机制的一些配置–现在让我们详细介绍一下。

覆盖Spring Security中大多数默认设置的原因之一是隐藏了应用程序受Spring Security保护的事实,并最大程度地减少了潜在的攻击者对应用程序的了解。

完全配置后, <form-login>元素如下所示:

<form-login 
   login-page='/login.html' 
   login-processing-url="/perform_login" 
   default-target-url="/homepage.html"
   authentication-failure-url="/login.html?error=true" 
   always-use-default-target="true"/>
4.1。 登录页面

通过登录页面属性o n <form-login>配置自定义登录页面:

login-page='/login.html'

如果未指定,则使用默认URL – spring_security_login –并且Spring Security将在该URL生成一个非常基本的登录表单。

4.2。 登录的POST URL

Spring Login将在其上触发触发身份验证过程的默认URL是/ j_spring_security_check

可以通过<form-login>上的login-processing-url属性覆盖此URL:

login-processing-url="/perform_login"

覆盖此默认URL的一个很好的理由是隐藏一个事实,即该应用程序实际上已通过Spring Security进行了保护-该信息不应在外部使用。

4.3。 成功登录页面

成功的登录过程之后,用户将被重定向到页面–默认情况下,页面是Web应用程序的根目录。

这可以通过<form-login>上的default-target-url属性来覆盖:

default-target-url="/homepage.html"

如果always-use-default-target设置为true,则始终将用户重定向到此页面。 如果该属性设置为false,则在升级用户进行身份验证之前,该用户将被重定向到他们要访问的上一页。

4.4。 登陆页面失败

与登录页面相同,登录失败页面默认由Spring Security在/ spring_security_login?login_error生成。

这可以通过<form-login>上的authentication-failure-url属性来覆盖:

authentication-failure-url="/login.html?error=true"

5.结论

在这个Spring登录示例中,我们配置了一个简单的身份验证过程–我们讨论了Spring Security登录表单,Security XML配置以及名称空间中可用的一些更高级的自定义。

可以在github项目中找到此Spring Login教程的实现–这是一个基于Eclipse的项目,因此应易于导入和运行。

当项目在本地运行时,可以在以下位置访问示例html:

参考: Spring安全表单,从我们的JCG合作伙伴 Eugen Paraschiv 登录baeldung博客。

翻译自: https://www.javacodegeeks.com/2013/05/spring-security-login.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值