- 表单登录
让我们看看基于表单的登录是如何在Spring Security中工作的 。首先,我们将看到如何将用户重定向到登录表单页面 。
文章插图
重定向到登录页面
该图构建了我们的SecurityFilterChain图解 。
①首先,用户向未授权的资源/private发出未经身份验证的请求 。
②Spring Security的FilterSecurityInterceptor通过抛出AccessDeniedException来拒绝未经身份验证的请求 。
③由于用户没有经过身份验证,
ExceptionTranslationFilter将启动Start Authentication并发送一个重定向到配置了AuthenticationEntryPoint的登录页面 。在大多数情况下,AuthenticationEntryPoint是LoginUrlAuthenticationEntryPoint的一个实例 。
【Spring Security身份验证详细介绍】④然后,浏览器将请求重定向到登录页面 。
⑤应用程序内的某些东西必须呈现登录页面 。
提交用户名和密码后,
UsernamePasswordAuthenticationFilter将对用户名和密码进行验证 。UsernamePasswordAuthenticationFilter扩展了AbstractAuthenticationProcessingFilter,所以下面的流程图看起来应该很相似 。
文章插图
文章插图
验证用户名和密码
该图构建了我们的SecurityFilterChain图解 。
①当用户提交他们的用户名和密码时,
UsernamePasswordAuthenticationFilter通过从HttpServletRequest中提取用户名和密码创建UsernamePasswordAuthenticationToken,这是一种Authentication类型 。
②接下来,将
UsernamePasswordAuthenticationToken传递到AuthenticationManager中进行身份验证 。AuthenticationManager的详细信息取决于用户信息的存储方式 。
③如果身份验证失败,则失败
-
- 清除SecurityContextHolder 。
- RememberMeServices.loginFail被调用 。请记住我没有配置,这是不允许操作的 。
- AuthenticationFailureHandler被调用 。
- SessionAuthenticationStrategy会在新登录时得到通知 。
- Authentication在SecurityContextHolder上设置 。稍后,securitycontextpersistencfilter将SecurityContext保存到HttpSession 。
- RememberMeServices.loginSuccess被调用 。请记住我没有配置,这是不允许操作的 。
- ApplicationEventPublisher发布一个InteractiveAuthenticationSuccessEvent 。
- AuthenticationSuccessHandler被调用 。通常这是一个SimpleUrlAuthenticationSuccessHandler,当我们重定向到登录页面时,它将重定向到ExceptionTranslationFilter保存的请求 。
一个最小的、显式的Java配置如下所示:
protected void configure(HttpSecurity http) {http// ....formLogin(withDefaults());}
在这个配置中,Spring Security将呈现一个默认的登录页面 。大多数生产应用程序都需要一个自定义的登录表单 。下面的配置演示了如何在表单中提供自定义登录页面 。
protected void configure(HttpSecurity http) throws Exception {http// ....formLogin(form -> form.loginPage("/login").permitAll());}
当在Spring Security配置中指定登录页面时,您将负责呈现该页面 。下面是一个Thymeleaf模板,它生成一个符合/login登录页面的HTML登录表单:示例:登录表单
路径:
src/main/resources/templates/login.html
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"><head><title>Please Log In</title></head><body><h1>Please Log In</h1><div th:if="${param.error}">Invalid username and password.</div><div th:if="${param.logout}">You have been logged out.</div><form th:action="@{/login}" method="post"><div><input type="text" name="username" placeholder="Username"/></div><div><input type="password" name="password" placeholder="Password"/></div><input type="submit" value=https://www.isolves.com/it/cxkf/jiagou/2022-09-14/"Log in" />
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 严国华|《罚罪》唐绍文身份曝光,他确实是卧底,但并非听命于严国华
- 肖振邦|《罚罪》仅剩6集!肖振邦的结局注定悲惨,邱涛的真实身份即将暴露
- 浙江卫视|前浙江卫视主持人突然晒娃,曾和杨迪传绯闻,圈外丈夫仍身份成谜
- 李伯东|罚罪:李伯东真实身份曝光,与张秋峰联手上演碟中谍
- 章安仁|《流金岁月》,章安仁或许对蒋南孙有一丝喜欢,更爱的是她的身份
- 赵鹏超|《罚罪》最狠毒之人,为钱抛弃所有亲人,“大王”身份实至名归
- |探秘新钓点鱼影都没见到,却意外钩起一螃蟹,得知身份后高兴坏了
- 陆安然|覆流年:5000两买下的冬青身份不简单,陆安然既送了人情又得忠仆
- |40岁韩国男星染毒被逮!身份被网友找到了!
- 吴镇宇|吴镇宇:坐公交被指责不该坐老人座,无奈掏出身份证,引无限感慨