Spring随笔06 利用LDAP校验用户

本小节将一步步教会你建立一个项目并给它添加Spring Security LDAP 模块。

你将建立一个 通过 Spring Security 提供的服务 来加密的程序, 该服务嵌入了 java 基本的 LDAP 加密。 你会通过加载一个配置了用户名密码集合的配置文件 来启动该服务。

1、建立一个简单的Controller。
这个Controller向前端写回简单的一句话。
如下:

 1 package cn.tiny77.guide06;
 2
 3 import org.springframework.web.bind.annotation.GetMapping;
 4 import org.springframework.web.bind.annotation.RestController;
 5
 6 @RestController
 7 public class HomeController {
 8
 9     @GetMapping("/")
10     public String index() {
11         return "Welcome to the home page!";
12     }
13 }

启动程序如下:

 1 package cn.tiny77.guide06;
 2
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5
 6 @SpringBootApplication
 7 public class App {
 8
 9     public static void main(String[] args) {
10         SpringApplication.run(App.class, args);
11     }
12
13 }

现在,我们可以在不验证身份的情况下访问这个Controller。
访问 http://localhost:8080 , 你将看到简短的文字信息。

2、嵌入Spring Security

新建一个类,通过java代码配置Spring Security

 1 package cn.tiny77.guide06;
 2
 3 import java.util.Arrays;
 4
 5 import org.springframework.context.annotation.Bean;
 6 import org.springframework.context.annotation.Configuration;
 7 import org.springframework.security.authentication.encoding.LdapShaPasswordEncoder;
 8 import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
 9 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
10 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
11 import org.springframework.security.ldap.DefaultSpringSecurityContextSource;
12
13 @Configuration
14 public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
15
16     @Override
17     protected void configure(HttpSecurity http) throws Exception {
18         http.authorizeRequests().anyRequest().fullyAuthenticated().and().formLogin();
19     }
20
21     @Override
22     public void configure(AuthenticationManagerBuilder auth) throws Exception {
23         auth.ldapAuthentication().userDnPatterns("uid={0},ou=people").groupSearchBase("ou=groups")
24                 .contextSource(contextSource()).passwordCompare().passwordEncoder(new LdapShaPasswordEncoder())
25                 .passwordAttribute("userPassword");
26     }
27
28     @Bean
29     public DefaultSpringSecurityContextSource contextSource() {
30         return new DefaultSpringSecurityContextSource(Arrays.asList("ldap://localhost:8389/"),
31                 "dc=springframework,dc=org");
32     }
33
34 }

@EnableWebSecurity 注解作用是 打开校验开关。

你同时需要一个LDAP服务,SpringBoot能自动化配置一个纯粹由java代码书写的服务,在本例中我们将会用到。
ldapAuthentication方法的作用是把表单中的username插入到字符串的"{0}"中,LDAP服务根据它查询uid={0},ou=people,dc=springframework,dc=org。
同时,passwordCompare方法配置译码器和密码的名称,获取密码并校验。

3、建立用户数据
LDAP服务可以用LDIF(LDAP Data Interchange Format)来代替用户数据。
application.properties中的spring.ldap.embedded.ldif属性允许SpringBoot引入一个LDIF文件,这使得加载用户数据很容易。

dn: dc=springframework,dc=org
objectclass: top
objectclass: domain
objectclass: extensibleObject
dc: springframework

dn: ou=groups,dc=springframework,dc=org
objectclass: top
objectclass: organizationalUnit
ou: groups

dn: ou=subgroups,ou=groups,dc=springframework,dc=org
objectclass: top
objectclass: organizationalUnit
ou: subgroups

dn: ou=people,dc=springframework,dc=org
objectclass: top
objectclass: organizationalUnit
ou: people

dn: ou=space cadets,dc=springframework,dc=org
objectclass: top
objectclass: organizationalUnit
ou: space cadets

dn: ou=\"quoted people\",dc=springframework,dc=org
objectclass: top
objectclass: organizationalUnit
ou: "quoted people"

dn: ou=otherpeople,dc=springframework,dc=org
objectclass: top
objectclass: organizationalUnit
ou: otherpeople

dn: uid=ben,ou=people,dc=springframework,dc=org
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Ben Alex
sn: Alex
uid: ben
userPassword: {SHA}nFCebWjxfaLbHHG1Qk5UU4trbvQ=

dn: uid=bob,ou=people,dc=springframework,dc=org
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Bob Hamilton
sn: Hamilton
uid: bob
userPassword: bobspassword

dn: uid=joe,ou=otherpeople,dc=springframework,dc=org
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Joe Smeth
sn: Smeth
uid: joe
userPassword: joespassword

dn: cn=mouse\, jerry,ou=people,dc=springframework,dc=org
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Mouse, Jerry
sn: Mouse
uid: jerry
userPassword: jerryspassword

dn: cn=slash/guy,ou=people,dc=springframework,dc=org
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: slash/guy
sn: Slash
uid: slashguy
userPassword: slashguyspassword

dn: cn=quote\"guy,ou=\"quoted people\",dc=springframework,dc=org
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: quote\"guy
sn: Quote
uid: quoteguy
userPassword: quoteguyspassword

dn: uid=space cadet,ou=space cadets,dc=springframework,dc=org
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Space Cadet
sn: Cadet
uid: space cadet
userPassword: spacecadetspassword

dn: cn=developers,ou=groups,dc=springframework,dc=org
objectclass: top
objectclass: groupOfUniqueNames
cn: developers
ou: developer
uniqueMember: uid=ben,ou=people,dc=springframework,dc=org
uniqueMember: uid=bob,ou=people,dc=springframework,dc=org

dn: cn=managers,ou=groups,dc=springframework,dc=org
objectclass: top
objectclass: groupOfUniqueNames
cn: managers
ou: manager
uniqueMember: uid=ben,ou=people,dc=springframework,dc=org
uniqueMember: cn=mouse\, jerry,ou=people,dc=springframework,dc=org

dn: cn=submanagers,ou=subgroups,ou=groups,dc=springframework,dc=org
objectclass: top
objectclass: groupOfUniqueNames
cn: submanagers
ou: submanager
uniqueMember: uid=ben,ou=people,dc=springframework,dc=org

如果你访问 localhost:8080 ,你就会被重定向到Spring Security 的提供的登录页。
输入用户名ben 密码 benspassword ,你就能看到如下页面。

4、Demo下载

时间: 2024-10-25 17:28:52

Spring随笔06 利用LDAP校验用户的相关文章

企业分布式微服务云SpringCloud SpringBoot mybatis (十六)Spring Boot中使用LDAP来统一管理用户信息

LDAP简介 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务.目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化.目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力.目录一般不支持通用数据库针对大量更新操作操作需要的复杂的事务管理或回卷策略.而目录服务的更新则一般都非常简单.这种目录可以存储包括个人信息.web链结.jpeg图像等各种信息.为了访问存储在目录中的

第二章--(第八单元)--LDAP网络用户账户

利用脚本非交互式建立LDAP网络用户账户并建立家目录 #!/bin/bash echo "install packages..." yum install sssd krb5-workstation autofs -y &> /dev/null 安装所需要的sssd服务,krb5-workstation服务,autofs服务 echo "config  authconfig..." authconfig \ 打开authconfig服务 --enabl

JavaEE学习之Spring Security3.x——模拟数据库实现用户,权限,资源的管理

一.引言 因项目需要最近研究了下Spring Security3.x,并模拟数据库实现用户,权限,资源的管理. 二.准备 1.了解一些Spring MVC相关知识: 2.了解一些AOP相关知识: 3.了解Spring: 4.了解Maven,并安装. 三.实现步骤 本示例中使用的版本是Spring Security3.2.2.通过数据库实现Spring Security认证授权大致需要以下几个步骤: 1.新建maven web project(因为本示例使用的是maven来构建的),项目结构如下,

Java程序通过LDAP对用户进行登陆验证

       在去年南京项目中,客户方要求用户登陆需要在其他平台下进行认证,当时客户用的LDAP"数据库"管理方式,后来查阅Java已经对LDAP进行了封装,不需要下载其他jar包就可以实现.        补脑:[LDAP]是"Lightweight Directory Access Protocol"的缩写,中文翻译过来就叫"轻量目录访问协议",看字面大概能猜出应该是以树状形存储数据的数据库,后来翻阅资料确实如此.其中包含几个重要的参数:CN

【Spring Security】二、数据库管理用户权限

一 引入相关的jar包 这个例子用的是mysql数据库和c3p0开源的jdbc连接池,在项目的pom.xml中引入jar包 <!-- Mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency>

2-8. LDAP 网络用户账户

##LDAP 网络用户账户## 学习目标 LDAP 客户端配置 自动挂载器元字符 1.1##使用 LDAP 服务器进行网络身份验 在本课程中,到目前为止,我们已经介绍了通过每台计算机上的本地文件(例如 /etc/passwd )管理的本地用户账户.但是 ,在多个系统上将本地用户账户协调一致非常困难 本节中 ,我们将介绍如何将计算机设置为客户端 ,以使用现有 LDAP 目录服务提供的网络用户账户.这样, LDAP 目录就成为我们组织中所有网络用户和组的中心机构 用户账户信息可以确定装户的特征和配置

ldap网络用户账户

1.安装客户端软件 1)安装Directory Client yum   groups  install  Directory\ Client -y 2)安装authconfig-gtk yum install authconfig-gtk -y authconfig-gtk 此时,ping classroom.example.com 是可以ping 通的 3)检测 ldap 认证用户 需要安装sssh服务    yum install sssh  -y getent passwd ldapus

在CentOS 6.5上安装OpenLDAP并配置LDAP方式用户登录

1.安装PHP和apache 如果没有EPEL的源需要安装下 yum install epel-release 若没有下载下来,就创建/etc/yum.repo.d/epel.repo [epel] name=Extra Packages for Enterprise Linux 6 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch mirrorlist=https://mirrors.fedo

Spring框架中利用注解进行自动装配的环境配置步骤和常见问题

第1步:配置XML文件 ,如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.spring