多语言展示
当前在线:653今日阅读:23今日分享:25

SpringSecurity开发基于表单的认证

小编之前写过几篇关系SpringBoot Security的基本应用,Spring Security是一组过滤器链,首先最重要的是UsernamePasswordAuthenticationFilter,它是用来处理表单登陆的,BasicAuthenticationFilter是用来处理Basic登陆的。UsernamePasswordAuthenticationFilter会把带用户名和密码的请求进行登陆处理,对于其他的请求则会放行,BasicAuthenticationFilter会查看请求头中是否有Basic信息。请求经过上述过滤器后最终会进入到FilterSecurityInterceptor,这个拦截器是最后一环,设置拦截的规则,用来决定请求能否访问最后的服务,ExceptionTransactionFilter用来处理异常。3使用SpringBoot Security实现用户认证5SpringBoot Security简介
工具/原料

IntelliJ IDEA

方法/步骤
1

自定义用户认证逻辑包括:处理用户信息获取逻辑、处理用户校验逻辑、处理密码加密解密。我们首先写用户信息获取逻辑,从数据库中查询用户信息,然后构建UserDetail的实现类User对象返回。处理用户信息获取逻辑需要使用UserDetailsService接口。

2

接下来我们处理用户的校验逻辑,1.是密码是否匹配,输入的密码经过加密后和数据库中存在的加密密码进行对比,springSecurity可以帮你完成 2. 用户是否被冻结以及密码是否过期等的校验。密码的加密和解密,我们可以使用Spring Security的PasswordEncoder。@Beanpublic PasswordEncoder passwordEncoder() {   return new BCryptPasswordEncoder();}处理用户校验逻辑写在UserDetails接口的实现里。String password = passwordEncoder.encode('your password');

3

那么实际开发中如何自定义登录页面呢?我们在配置类中的configure(HttpSecurity http)方法中的,http.formLogin().loginPage('/demo-signIn.html')。我们在resources下面创建resources目录,创建demo-signIn.html。我们还需要给这个路径授权,antMatchers('/demo-signIn.html').permitAll()

4

SpringSecurity开发基于表单的认证流程如下:我们需要根据是html请求还是数据请求来处理不同的返回。我们创建BrowserSecurityController类,我们先去判断是什么请求,然后重定向到页面或者返回json数据。 private RequestCache requestCache = new HttpSessionRequestCache();  private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy(); @RequestMapping('/authentication/require') @ResponseStatus(code = HttpStatus.UNAUTHORIZED) public SimpleResponse requireAuthentication(HttpServletRequest request, HttpServletResponse response)       throws IOException {     SavedRequest savedRequest = requestCache.getRequest(request, response);     if (savedRequest != null) {       String targetUrl = savedRequest.getRedirectUrl();       logger.info('引发跳转的请求是:' + targetUrl);       if (StringUtils.endsWithIgnoreCase(targetUrl, '.html')) {          redirectStrategy.sendRedirect(request, response, securityProperties.getBrowser().getLoginPage());       }    }     return new SimpleResponse('访问的服务需要身份认证,请引导用户到登录页'); }

5

如何自定义登录成功的处理?如何自定义登录失败的处理?我们使用AuthenticationSuccessHandler处理登录成功的请求,使用AuthenctiationFailureHandler处理登录失败的请求。

注意事项

以上是SpringSecurity开发基于表单的认证的基本逻辑,并非实际代码。

推荐信息