博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Security使用心得
阅读量:4940 次
发布时间:2019-06-11

本文共 2684 字,大约阅读时间需要 8 分钟。

某天,你的客户提出这样一个需求,在点击购买商品的时,如果用户没有注册,并且用户没有账号,这时用户去创建账户,然后要直接返回到想购买商品的付款页面。你会该如何基于Spring Security实现?

  Spring Security 是为基于Spring的应用程序提供声明式安全保护的安全性框架。它能够在Web请求级别和方法调用级别处理身份验证和授权。因为基于Spring框架,所以Spring Security充分利用依赖注入(dependency injection)和AOP.

  Spring Security提供了多种验证方式,最常见的有:XML配置和数据库验证方式。试想当我们点击购买商品并且没有登录的情况下,Spring Security 一般会跳到登录,但是登陆是由Spring帮我们实现的,所以我们跳到登陆页面后也就丢失了与商品的联系,其实这中间Spring会经历多个步骤,最后帮你验证你输入的结果。在跳进登陆页面前Spring会先调用默认 AuthenticationEntryPoint接口的方法,我们通过重载这个方法可以实现我们想进行的操作,这里就是保存用户点击的商品信息。

1 public class SimpleEntryPointHandler implements AuthenticationEntryPoint { 2  3     @Override 4     public void commence(HttpServletRequest request, HttpServletResponse httpServletResponse, AuthenticationException e) throws  ServletException { 5         if (request.getRequestURI().contains("/payment")) { 6             httpServletResponse.sendRedirect("/"); 7         } 8         else{ 9             request.getSession().setAttribute("reserveItemId", request.getParameter("itemId"));10             httpServletResponse.sendRedirect("/login");11         }12     }13 }

 

spring-security部分配置: 

1     
2 3
4
5
6
7
8
9
10
11
13
14
15

 

  解决了如何在login之前进行一些操作,接下来就是解决如何在创建用户之后进行登陆。Spring Security的验证是通过用户实现AuthenticationManager接口里的authenticate方法来验证的,常见的验证方法之前也提到了。所以当用户填好数据跳转到controller得时候我们手动实现这个方法,就能手动操作spring security来帮我们进行验证,具体如下:

 

1 @Component 2 public class AutoLogin { 3  4     @Autowired 5     @Qualifier("authenticationManager") 6     protected AuthenticationManager authenticationManager; 7  8     public void autoLogin(Account account, HttpServletRequest request) { 9         UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(10                 account.getEmailAddress(), account.getPassword());11 12         request.getSession();13 14         token.setDetails(new WebAuthenticationDetails(request));15         Authentication authenticatedUser = authenticationManager.authenticate(token);16 17         SecurityContextHolder.getContext(). setAuthentication(authenticatedUser);18     }19 }

然后 Controller可以装配这个bean 调用authenticate就可达到登录效果。

spring-security部分配置:

  此配置也就是数据库验证的测试provider,它制定了spring security验证手法,并且能够以bean的方式注入到java service里面,使其变得更加灵活。

 

1     
2
3
8
9

  最后,本例子只是Spring Security中的一部分,Spring Security将系统安全逻辑从业务中分离出来,充分利用面向切面编程的思想,所以是一个值得深入研究的框架。通过这个切入点我们也可以探寻spring security执行的整个流程,更了解它的精髓。

 

本例子代码:https://github.com/yeahyangliu/spring-security.git

转载于:https://www.cnblogs.com/Alex--Yang/p/3323181.html

你可能感兴趣的文章
Ajax异步请求struts的JSON机制(省市区三级联动)
查看>>
mysql中的union用法以及子查询综合应用
查看>>
jQuery使用总结
查看>>
Oracle数据库事物隔离级别
查看>>
多变的形状
查看>>
Navicat For Mysql快捷键
查看>>
Git学习笔记4
查看>>
【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(2)!
查看>>
利用锚点制作简单索引效果
查看>>
Photoshop
查看>>
webstorm使用说明
查看>>
项目练习计划
查看>>
Xshell远程登录
查看>>
@RequestParam与@PathVariable的区别
查看>>
C语言之break和continue
查看>>
jquery.form.js使用
查看>>
LINQ to Entities 不支持 LINQ 表达式节点类型“ArrayIndex”。
查看>>
回顾2012,展望2013
查看>>
聊聊、Spring 第二篇
查看>>
Java求三个数中的最大值
查看>>