gpt4 book ai didi

Spring Security 表单登录功能的实现方法

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Spring Security 表单登录功能的实现方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1.简介 。

本文将重点介绍使用 Spring Security 登录。 本文将构建在之前简单的 Spring MVC示例 之上,因为这是设置Web应用程序和登录机制的必不可少的.

2. Maven 依赖 。

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

3. Spring Security Java配置 。

我们首先创建一个扩展 WebSecurityConfigurerAdapter 的 Spring Security 配置类。 通过添加 @EnableWebSecurity ,我们获得了Spring Security和MVC集成支持:

@Configuration@EnableWebSecuritypublic class SecSecurityConfig extends WebSecurityConfigurerAdapter {  @Override  protected void configure(final AuthenticationManagerBuilder auth) throws Exception {    auth.inMemoryAuthentication()     .withUser("user1").password(passwordEncoder().encode("user1Pass")).roles("USER")     .and()     .withUser("user2").password(passwordEncoder().encode("user2Pass")).roles("USER")     .and()     .withUser("admin").password(passwordEncoder().encode("adminPass")).roles("ADMIN");  }  @Override  protected void configure(final HttpSecurity http) throws Exception {    http     .csrf().disable()     .authorizeRequests()     .antMatchers("/admin/**").hasRole("ADMIN")     .antMatchers("/anonymous*").anonymous()     .antMatchers("/login*").permitAll()     .anyRequest().authenticated()     .and()     .formLogin()     .loginPage("/login.html")     .loginProcessingUrl("/perform_login")     .defaultSuccessUrl("/homepage.html", true)     //.failureUrl("/login.html?error=true")     .failureHandler(authenticationFailureHandler())     .and()     .logout()     .logoutUrl("/perform_logout")     .deleteCookies("JSESSIONID")     .logoutSuccessHandler(logoutSuccessHandler());  }  @Bean  public PasswordEncoder passwordEncoder() {    return new BCryptPasswordEncoder();  }}

在此示例中,我们使用内存身份验证并定义了3个用户.

现在来看看我们用来创建表单登录配置的元素.

3.1. authorizeRequests() 。

我们允许匿名访问*/login*,以便用户可以进行身份验证,同时也是保护其他请求。请注意,*antMatchers()*元素的顺序很重要 - 首先需要填写具体的路径规则,然后是才是大致匹配的规则.

3.2. formLogin() 。

这有几种方法可以用来配置表单登录的行为:

loginPage()  – 自定义登录页面 loginProcessingUrl()  – 提交username和password的URL defaultSuccessUrl()  – 登录成功后跳转的URL failureUrl()  – 登录失败后跳转的URL 。

3.3. Authentication Manager 。

身份验证提供程序由一个简单的内存实现支持 - InMemoryUserDetailsManager 。 当尚不需要完整的持久性机制时,这对于进行快速原型设计很有用.

从Spring 5开始,我们还必须定义密码编码器。 在我们的例子中,我们使用了 BCryptPasswordEncoder .

4. 添加Spring Security到Web应用 。

要使用上面定义的Spring Security配置,我们需要将其添加到Web应用程序。 在这种情况下,我们不需要任何 web.xml :

public class SpringApplicationInitializer  extends AbstractAnnotationConfigDispatcherServletInitializer {    protected Class<?>[] getRootConfigClasses() {    return new Class[] {SecSecurityConfig.class};  }}

注意,如果我们使用Spring Boot应用程序,则不需要此初始化程序。 有关如何在Spring Boot中加载安全性配置的更多详细信息,详情参阅 Spring Boot security auto-configuration 。

5. Spring Security XML配置 。

我们来看看相应的XML配置。整个项目使用Java配置,因此我们需要通过Java @Configuration 类导入XML配置文件:

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

以及Spring Security 的XML配置– webSecurityConfig.xml

<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>    <password-encoder ref="encoder" />  </authentication-provider></authentication-manager> <beans:bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"></beans:bean>

6. web.xml 。

在引入Spring 4之前,我们曾经在 web.xml 中配置Spring Security - 只有一个额外的过滤器添加到 Spring MVC 的web.xml中:

<display-name>Spring Secured Application</display-name> <!-- Spring MVC --><!-- ... --><!-- 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>

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

7. Login Form 。

登录表单页面使用简单的机制将视图名称映射到URL 向Spring MVC注册,且无需编写Controller:

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

对应于 login.jsp :

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

Spring Login form包含以下相关组件:

login  - 接受表单POST的URL,触发身份验证过程 username  - 用户名 password  - 密码 。

8.进一步配置Spring登录 。

当我们在上面介绍Spring安全配置时,我们简要讨论了一些登录机制的配置 - 现在详细介绍一下.

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

完全配置后,login元素如下所示:

@Overrideprotected void configure(HttpSecurity http) throws Exception {  http.formLogin()   .loginPage("/login.html")   .loginProcessingUrl("/perform_login")   .defaultSuccessUrl("/homepage.html",true)   .failureUrl("/login.html?error=true")}

或者相应的XML配置:

<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"/>

8.1. 登录页 。

接下来,让我们看看如何使用*loginPage()*方法配置自定义登录页面:

http.formLogin()   .loginPage("/login.html") 。

或者,使用XML配置:

login-page='/login.html' 。

如果我们不指定这个,Spring Security将在*/login*上生成一个非常基本的登录表单.

8.2. 登录的POST URL 。

触发身份验证默认的URL是*/login*,我们可以使用 loginProcessingUrl 方法来覆盖此URL:

http.formLogin() .loginProcessingUrl("/perform_login")

或者,使用XML配置

login-processing-url="/perform_login" 。

覆盖此默认URL的一个很好的理由是:隐藏应用程序受 Spring Security 保护的事实 - 该信息不应在外部提供.

8.3. 登录成功页面 。

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

我们可以通过*defaultSuccessUrl()*方法覆盖它:

http.formLogin() .defaultSuccessUrl("/homepage.html")

或者,使用XML配置:

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

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

8.4. 登录失败页面 。

与登录页面相同,默认情况下, Spring Security 会在*/login?error*自动生成登录失败页面.

要覆盖它,我们可以使用*failureUrl()*方法:

http.formLogin() .failureUrl("/login.html?error=true")

或者XML

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

9. 结论 。

在这个Spring登录示例中,我们配置了一个简单的身份验证过程 - 我们讨论了Spring安全登录表单,安全配置和一些可用的更高级的自定义.

这个Spring登录教程的实现可以在GitHub 项目中找到 - 这是一个基于Eclipse的项目,所以它应该很容易导入和运行.

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

http://localhost:8080/spring-security-mvc-login/login.html 。

总结 。

以上所述是小编给大家介绍的Spring Security 表单登录功能的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢! 。

最后此篇关于Spring Security 表单登录功能的实现方法的文章就讲到这里了,如果你想了解更多关于Spring Security 表单登录功能的实现方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com