SpringSecurity初步理解
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初步理解相关推荐
- 如何让人大致理解RxJava思想:第一节 初步理解RxJava
如何让人大致理解RxJava思想:第一节 初步理解RxJava 首先,我们需要明确,一个人不可能一口气吃成一个胖子,你不可能仅仅花5分钟看完我这篇文章,然后一拍桌子,大叫一声,我知道了,然后赢取白富美 ...
- JAVA 枚举类的初步理解
JAVA 枚举类的初步理解 现在Java的枚举类在真实项目中已经用的比较频繁,比静态常量更好用,也更有限定性,enum类可以用来表示有限的类对象,比如星期.月份.性别或者项目中的产品类型 像诸如此类的 ...
- 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感...
关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...
- 初步理解pagerank算法
初步理解pagerank算法 第一次写不是课程要求的博客,可能有不严谨的地方,如果有写错的希望能在评论区指出. 算法思想 pagerank算法用于网页排序,根据给网页的重要程度给各个网页打分,根据分数 ...
- Adaboost算法的初步理解
菜鸟初次接触Adaboost,虽然算法流程比较清晰简单,但对于其中的理论,存在着不少疑惑之处,如下所示: 1)如何训练得到的弱分类器,我们需要训练出多少个弱分类器进行后续的计算?对若分类器有什么要求吗 ...
- 我对SNS游戏的初步理解
国庆期间,我专门研究了一款SNS游戏,巴别小精灵,这是一款背单词的游戏.算是一款交互式英语学习的应用.一点初步理解和体会,与大家分享. SNS游戏的特点 (1) 异步性 (2) 真 ...
- Hamiltonian Monte Carlo抽样算法的初步理解
Hamiltonian Monte Carlo抽样算法的初步理解 接受拒绝采样算法 MCMC回顾 Hamiltonian dynamics 拉格朗日方程 从牛顿方程出发推导拉格朗日方程 勒让德变换 哈 ...
- 红黑树插入操作的初步理解
红黑树插入操作的初步理解 文章目录 红黑树插入操作的初步理解 红黑树的特征 红黑树的插入节点总是红色的 红黑树的修正 变色 左旋 右旋 插入操作 插入操作的代码实现 红黑树和AVL树的对比 参考链接 ...
- wmts格式说明_WMTS服务初步理解与读取
WMTS 服务初步理解与读取 当前在网络地图服务中,大部分都会采取缓存技术来替代实时对数据进行可视化,用以提高地图响应能 力.介绍 OGC 提出的缓存技术标准的 WMTS 服务. WMTS 简介 WM ...
- 初步理解MultipartFile[文件上传]
浅识MultipartFile 一.概述 二.对MultipartFile初步理解 1.MultipartFile类的注释说明 2.MultipartFile常用方法解析 三.MultipartFil ...
最新文章
- usaco shuttle puzzle(dfs剪枝)
- sklearn API快速上手
- String.Format in javascript
- 帮朋友招一个IM开发人员
- 深入浅出之C++11新特性
- Linux实验三父子进程每隔3秒,实验三进程的创建和简单控制(学生分析.doc
- 用 SOLID 原则保驾 React 组件开发
- 使用ASP.NET 2.0中的GridView控件
- J2EE学习笔记-第二章(Web应用初步)
- mybatis多参数传递(其中包括数组)
- 懒人分析jQuery源码
- cocos2d-html5 仿微信打飞机游戏
- 导航电子地图数据格式概论
- 计算机毕业设计Java医院信息管理系统(系统+源码+mysql数据库+Lw文档)
- 关于HC05 蓝牙模块与与蓝牙模块连接
- Unity 接入有道智云AI - 文本翻译
- PS调出唯美紫蓝色天空背景女生照片
- 大数据带来了哪些改变
- 时间轮和时间堆管理定时器
- 语义通信(Semantic Communication)