Authenticating a User with LDAP

首先创建一个简单的web控制器

1 packagehello;2
3 importorg.springframework.web.bind.annotation.GetMapping;4 importorg.springframework.web.bind.annotation.RestController;5
6 @RestController7 public classHomeController {8
9     @GetMapping("/")10     publicString index() {11         return "Welcome to the home page!";12 }13 }

老生常谈,用到springboot,肯定少不了它的启动类

packagehello;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic classApplication {public static voidmain(String[] args) {SpringApplication.run(Application.class, args);}}

SpringSecurity需要用到的maven依赖如下图

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.ldap</groupId><artifactId>spring-ldap-core</artifactId></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-ldap</artifactId></dependency><dependency><groupId>com.unboundid</groupId><artifactId>unboundid-ldapsdk</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-test</artifactId><scope>test</scope></dependency>
</dependencies>

开始做详细的安全认证,安全认证的思路是这样的“

创建一个类并继承WebSecurityConfigurerAdapter这个方法,并在之类中重写configure的3个方法,其中3个方法中参数包括为HttpSecurity(HTTP请求安全处理),AuthenticationManagerBuilder(身份验证管理生成器)和WebSecurity(WEB安全)。

如下代码
1 packagecom.ssm.demo.com.ssm.Hello;2
3 importorg.springframework.context.annotation.ComponentScan;4 importorg.springframework.context.annotation.Configuration;5 importorg.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;6 importorg.springframework.security.config.annotation.web.builders.HttpSecurity;7 importorg.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;8 importorg.springframework.security.crypto.password.LdapShaPasswordEncoder;9 /**
10 *11 创建一个类并继承WebSecurityConfigurerAdapter这个方法,并在之类中重写configure的3个方法,12 其中3个方法中参数包括为13 HttpSecurity(HTTP请求安全处理),AuthenticationManagerBuilder(身份验证管理生成器)和WebSecurity(WEB安全)。14  */
15 @Configuration16 @ComponentScan17 public class WebSecurityConfig extendsWebSecurityConfigurerAdapter {18     /**
19 * http请求安全处理20 *@paramhttp21 *@throwsException22      */
23 @Override24     protected void configure(HttpSecurity http) throwsException {25         //http.authorizeRequests()这里的意思是通过方法来开始请求权限配置,26         //fullyAuthenticated()意为用户完全认证可以访问27         //and()是返回一个securityBuilder对象,formLogin()和httpBasic()是授权的两种方式
28 http.authorizeRequests().anyRequest().fullyAuthenticated().and().formLogin();29 }30
31     /**
32 * 身份验证管理生成器33 *@paramauth34 *@throwsException35      */
36 @Override37     protected void configure(AuthenticationManagerBuilder auth) throwsException {38         auth.ldapAuthentication().userDnPatterns("uid={0},ou=people").groupSearchBase("ou=groups").contextSource().39                 url("ldap://localhost:8389/dc=springframework,dc=org").and().passwordCompare().passwordEncoder(newLdapShaPasswordEncoder())40                 .passwordAttribute("userPassword");41 }42 }

设置用户数据,使用到LDAP服务器(ldif文件),

在yml中添加LDAP服务的代理

server:servlet:context-path: /llhport:8082spring:datasource:url: jdbc:mysql://127.0.0.1:3306/depot?useUnicode=true&characterEncoding=utf8
username: rootpassword:123456servlet:multipart:max-file-size: 128KBmax-request-size: 128KBldap:embedded:ldif: classpath:test-server.ldifbase-dn: dc=springframework,dc=orgport:8389

resource文件夹下面创建一个test-server.ldif文件

1 dn: dc=springframework,dc=org2 objectclass: top3 objectclass: domain4 objectclass: extensibleObject5 dc: springframework6
7 dn: ou=groups,dc=springframework,dc=org8 objectclass: top9 objectclass: organizationalUnit10 ou: groups11
12 dn: ou=subgroups,ou=groups,dc=springframework,dc=org13 objectclass: top14 objectclass: organizationalUnit15 ou: subgroups16
17 dn: ou=people,dc=springframework,dc=org18 objectclass: top19 objectclass: organizationalUnit20 ou: people21
22 dn: ou=space cadets,dc=springframework,dc=org23 objectclass: top24 objectclass: organizationalUnit25 ou: space cadets26
27 dn: ou=\"quoted people\",dc=springframework,dc=org
28 objectclass: top29 objectclass: organizationalUnit30 ou: "quoted people"
31
32 dn: ou=otherpeople,dc=springframework,dc=org33 objectclass: top34 objectclass: organizationalUnit35 ou: otherpeople36
37 dn: uid=ben,ou=people,dc=springframework,dc=org38 objectclass: top39 objectclass: person40 objectclass: organizationalPerson41 objectclass: inetOrgPerson42 cn: Ben Alex43 sn: Alex44 uid: ben45 userPassword: {SHA}nFCebWjxfaLbHHG1Qk5UU4trbvQ=
46
47 dn: uid=bob,ou=people,dc=springframework,dc=org48 objectclass: top49 objectclass: person50 objectclass: organizationalPerson51 objectclass: inetOrgPerson52 cn: Bob Hamilton53 sn: Hamilton54 uid: bob55 userPassword: bobspassword56
57 dn: uid=joe,ou=otherpeople,dc=springframework,dc=org58 objectclass: top59 objectclass: person60 objectclass: organizationalPerson61 objectclass: inetOrgPerson62 cn: Joe Smeth63 sn: Smeth64 uid: joe65 userPassword: joespassword66
67 dn: cn=mouse\, jerry,ou=people,dc=springframework,dc=org68 objectclass: top69 objectclass: person70 objectclass: organizationalPerson71 objectclass: inetOrgPerson72 cn: Mouse, Jerry73 sn: Mouse74 uid: jerry75 userPassword: jerryspassword76
77 dn: cn=slash/guy,ou=people,dc=springframework,dc=org78 objectclass: top79 objectclass: person80 objectclass: organizationalPerson81 objectclass: inetOrgPerson82 cn: slash/guy83 sn: Slash84 uid: slashguy85 userPassword: slashguyspassword86
87 dn: cn=quote\"guy,ou=\"quoted people\",dc=springframework,dc=org
88 objectclass: top89 objectclass: person90 objectclass: organizationalPerson91 objectclass: inetOrgPerson92 cn: quote\"guy
93 sn: Quote94 uid: quoteguy95 userPassword: quoteguyspassword96
97 dn: uid=space cadet,ou=space cadets,dc=springframework,dc=org98 objectclass: top99 objectclass: person100 objectclass: organizationalPerson101 objectclass: inetOrgPerson102 cn: Space Cadet103 sn: Cadet104 uid: space cadet105 userPassword: spacecadetspassword106
107
108
109 dn: cn=developers,ou=groups,dc=springframework,dc=org110 objectclass: top111 objectclass: groupOfUniqueNames112 cn: developers113 ou: developer114 uniqueMember: uid=ben,ou=people,dc=springframework,dc=org115 uniqueMember: uid=bob,ou=people,dc=springframework,dc=org116
117 dn: cn=managers,ou=groups,dc=springframework,dc=org118 objectclass: top119 objectclass: groupOfUniqueNames120 cn: managers121 ou: manager122 uniqueMember: uid=ben,ou=people,dc=springframework,dc=org123 uniqueMember: cn=mouse\, jerry,ou=people,dc=springframework,dc=org124
125 dn: cn=submanagers,ou=subgroups,ou=groups,dc=springframework,dc=org126 objectclass: top127 objectclass: groupOfUniqueNames128 cn: submanagers129 ou: submanager130 uniqueMember: uid=ben,ou=people,dc=springframework,dc=org

这时候就可以启动springboot的启动类,键入地址:http://127.0.0.1:8082/llh/,发现已经被拦截下来了,并且重定向到了Spring Security提供的登录页面

,见下图:

输入用户名:ben,密码:benspassword,即可登录。

转载于:https://www.cnblogs.com/javallh/p/9262384.html

SpringSecurity初步理解相关推荐

  1. 如何让人大致理解RxJava思想:第一节 初步理解RxJava

    如何让人大致理解RxJava思想:第一节 初步理解RxJava 首先,我们需要明确,一个人不可能一口气吃成一个胖子,你不可能仅仅花5分钟看完我这篇文章,然后一拍桌子,大叫一声,我知道了,然后赢取白富美 ...

  2. JAVA 枚举类的初步理解

    JAVA 枚举类的初步理解 现在Java的枚举类在真实项目中已经用的比较频繁,比静态常量更好用,也更有限定性,enum类可以用来表示有限的类对象,比如星期.月份.性别或者项目中的产品类型 像诸如此类的 ...

  3. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感...

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

  4. 初步理解pagerank算法

    初步理解pagerank算法 第一次写不是课程要求的博客,可能有不严谨的地方,如果有写错的希望能在评论区指出. 算法思想 pagerank算法用于网页排序,根据给网页的重要程度给各个网页打分,根据分数 ...

  5. Adaboost算法的初步理解

    菜鸟初次接触Adaboost,虽然算法流程比较清晰简单,但对于其中的理论,存在着不少疑惑之处,如下所示: 1)如何训练得到的弱分类器,我们需要训练出多少个弱分类器进行后续的计算?对若分类器有什么要求吗 ...

  6. 我对SNS游戏的初步理解

    国庆期间,我专门研究了一款SNS游戏,巴别小精灵,这是一款背单词的游戏.算是一款交互式英语学习的应用.一点初步理解和体会,与大家分享. SNS游戏的特点 (1)      异步性 (2)      真 ...

  7. Hamiltonian Monte Carlo抽样算法的初步理解

    Hamiltonian Monte Carlo抽样算法的初步理解 接受拒绝采样算法 MCMC回顾 Hamiltonian dynamics 拉格朗日方程 从牛顿方程出发推导拉格朗日方程 勒让德变换 哈 ...

  8. 红黑树插入操作的初步理解

    红黑树插入操作的初步理解 文章目录 红黑树插入操作的初步理解 红黑树的特征 红黑树的插入节点总是红色的 红黑树的修正 变色 左旋 右旋 插入操作 插入操作的代码实现 红黑树和AVL树的对比 参考链接 ...

  9. wmts格式说明_WMTS服务初步理解与读取

    WMTS 服务初步理解与读取 当前在网络地图服务中,大部分都会采取缓存技术来替代实时对数据进行可视化,用以提高地图响应能 力.介绍 OGC 提出的缓存技术标准的 WMTS 服务. WMTS 简介 WM ...

  10. 初步理解MultipartFile[文件上传]

    浅识MultipartFile 一.概述 二.对MultipartFile初步理解 1.MultipartFile类的注释说明 2.MultipartFile常用方法解析 三.MultipartFil ...

最新文章

  1. usaco shuttle puzzle(dfs剪枝)
  2. sklearn API快速上手
  3. String.Format in javascript
  4. 帮朋友招一个IM开发人员
  5. 深入浅出之C++11新特性
  6. Linux实验三父子进程每隔3秒,实验三进程的创建和简单控制(学生分析.doc
  7. 用 SOLID 原则保驾 React 组件开发
  8. 使用ASP.NET 2.0中的GridView控件
  9. J2EE学习笔记-第二章(Web应用初步)
  10. mybatis多参数传递(其中包括数组)
  11. 懒人分析jQuery源码
  12. cocos2d-html5 仿微信打飞机游戏
  13. 导航电子地图数据格式概论
  14. 计算机毕业设计Java医院信息管理系统(系统+源码+mysql数据库+Lw文档)
  15. 关于HC05 蓝牙模块与与蓝牙模块连接
  16. Unity 接入有道智云AI - 文本翻译
  17. PS调出唯美紫蓝色天空背景女生照片
  18. 大数据带来了哪些改变
  19. 时间轮和时间堆管理定时器
  20. 语义通信(Semantic Communication)

热门文章

  1. 面试题之接口和抽象类的区别
  2. Elasticsearch版本控制理解
  3. JMX实现远程服务器Tomcat系统监控之三
  4. java中容器如何维护其内容
  5. conduit 安装试用
  6. 第 3 章 sqlmap - automatic SQL injection and database takeover tool
  7. Yann LeCun说是时候放弃概率论了,因果关系才是理解世界的基石
  8. 物联网标准组织OCF成立 有望解决碎片化问题
  9. 圆桌讨论:计算机视觉如何渗透你我的生活?|CCF-GAIR 2017
  10. 编译安装Nginx以及配置运行Drupal 8,实现上传进度功能