springboot官⽅例⼦--使⽤SpringSecurity和LDAP对⽤户进⾏⾝份验证
本次讲的内容是,使⽤Spring Security和LDAP对⽤户进⾏⾝份验证,你将学到Spring Security知识,这是⼀个⾮常常⽤的安全框架(另外⼀个是 shiro);然后你将学到LDAP,这是⼀个⾮常轻量⽬录访问协议,特别适合如部门信息号⼯等这种有层次结构的树形数据。
我利⽤业余时间,翻译了Spring官⽹的例⼦,⽅便中⽂不好的同学,将陆续发到头条上,欢迎⼤家关注,也可以上我个⼈BLOG:,上⾯有已经翻译过的。
springboot官⽅例⼦–对⽤户进⾏⾝份验证
正⽅代码如下:
程序结构
└── src
└── main
└── java
└── hello
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-authenticating-ldap</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<!-- tag::security[] -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- end::security[] -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Spring Boot将会你做如下的事:
将 classpath ⾥⾯所有⽤到的jar包构建成⼀个可执⾏的 JAR ⽂件,⽅便执⾏你的程序
搜索public static void main()⽅法并且将它当作可执⾏类
根据springboot版本,去查相应的依赖类版本,当然你可以定义其它版本。
创建⼀个简单的web控制器
在Spring中,REST端点就是SpringMVC控制器。以下Spring MVC控制器通过返回简单消息来处理GET / 请求:
src/main/java/hello/HomeController.java
package hello;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@GetMapping("/")
public String index() {
return "Welcome to the home page!";
}
}
整个类都标记了@RestController,因此SpringMVC可以使⽤其内置的扫描功能⾃动检测控制器,并⾃动配置Web路由。该⽅法⽤ @GetMapping标记,⽤以标记路径和REST操作。在这种情况下,默认⾏为是GET,它返回⼀条消息。
@RestController还告诉SpringMVC直接将⽂本写⼊HTTP响应主体,因为没有任何视图。本指南在你
访问页⾯时,您将在浏览器中收到⼀条简单的消息,因为本次重点是使⽤LDAP保护页⾯。
创建⼀个不安全web应⽤
在保护Web应⽤程序之前,请验证它是否正常⼯作。要做到这⼀点,您需要定义⼀些关键bean。为此,创建⼀个应⽤程序类。
src/main/java/hello/Application.java
package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@SpringBootApplication包含如下注解:
@Configuration 将类标记为应⽤程序上下⽂的bean定义源。
@EnableAutoConfiguration 告诉SpringBoot根据类路径设置、其他bean和各种属性设置开始添加bean。
@ComponentScan 告诉Spring在hello包中查其他组件、配置和服务。
您注意到没有⼀⾏XML吗?也没有l⽂件。这个Web应⽤程序是100%纯Java,您不必⿇烦的基础配置。
SpringBoot⽀持内存中的关系数据库引擎H2,并⾃动创建连接。因为我们使⽤的是SpringJDBC,所以SpringBoot会⾃动创建⼀个JDBCTemplate。@Autowired JdbcTemplate字段⾃动加载并使其可⽤。
** 运⾏你的程序(STS下,Maven可参考前⾯⽂章)**
右键-选择Run as-Spring Boot App:
Welcome to the home page!
设置Spring Security
要配置Spring安全性,⾸先需要添加⼀些额外的依赖项。
<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>
这些依赖项增加了Spring Security和UnboundId。UnboundId是⼀个开源LDAP服务器。这样,您就可以使⽤纯Java来配置安全策略。src/main/java/hello/WebSecurityConfig.java
import t.annotation.Configuration;
import org.fig.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.fig.annotation.web.builders.HttpSecurity;
import org.fig.figuration.WebSecurityConfigurerAdapter;
import org.pto.password.LdapShaPasswordEncoder;
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().fullyAuthenticated()
.and()
.formLogin();
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.ldapAuthentication()
.userDnPatterns("uid={0},ou=people")
.groupSearchBase("ou=groups")
.contextSource()
.url("ldap://localhost:8389/dc=springframework,dc=org")
.and()
.passwordCompare()
.passwordEncoder(new LdapShaPasswordEncoder())
.passwordAttribute("userPassword");
}
}
@EnableWebSecurity开启了使⽤Spring Security所需的各种bean。
您还需要⼀个LDAP服务器。Spring boot提供了⼀个⾃动配置的、纯Java编写的嵌⼊式服务器,我们本次⽤这个。 ldapAuthentication()⽅法配置登录表单的⽤户名插⼊{0}的位置,
以便在LDAP服务器中搜索uid={0},ou=people,dc=springframework,dc=org。此外,passwordCompare()⽅法还配置编码器和密码属性的名称。
设置⽤户数据
LDAP服务器可以使⽤LDIF(LDAP数据交换格式)⽂件来交换⽤户数据。application.properties中的bedded.ldif属性允许Springboot导⼊LDIF数据⽂件,这很⽅便预加载模拟数据。
src/main/resources/test-server.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=orgspringboot中文
objectclass: top

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。