• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

本指南将带您创建一个应用程序,并使用Spring Security LADP模块来增强安全性。

What You Will build

您将构建一个简单的web应用程序,它受到Spring Security的基于Java的嵌入式LDAP服务器的保护。您将加载包含一组用户的数据文件LADP服务器。

What You Need

大约15分钟。

您最喜欢的文本编辑器或IDE

JDK 1.8及以上

Graddle 4或Maven 3.2

您也可以将代码直接导入到IDE中。

Spring工具套件(STS)

因特尔里思想

How to complete this guide

像大多数Spring指南一样,您可以从头开始并完成每个步骤,也可以绕过您已经熟悉的基本设置。无论哪种方式,您最终都会完成代码。

若要从头开始,请转到“从Spring Initializr开始”。

要跳过基本步骤,请执行以下步骤:

下载并解压缩本指南的原始存储库,或者使用Git克隆GIt克隆https://github.com/spring-guides/gs-authenticating-ldap.git

输入(CD)GS-authenticating-LDAP/initial。

转到创建一个简单的Web控制器。

完成后,您可以再次检查您的GS-authentic ation-LDAP/complete代码。

Starting with Spring Initializr

您可以使用预初始化项目单击Generate来下载ZIP文件。此项目被配置为适合本指南。

要手动初始化项目:

浏览https://start.spring.io/.该服务获取应用程序所需的所有依赖项,并且已经完成了大部分配置。

选择Gradle或Maven以及您想要使用的语言。本文假设您选择Java。

单击Dependencies选择Spring Web.

点击Generate.

下载ZIP文件,这是为您的选择配置的web应用程序文件。

如果您的IDE集成了Spring Initializr,您可以从您的IDE完成这一步。

您也可以从GitHub派生这个项目,并使用您的IDE或编辑器打开它。

Create a Simple Web Controller

在SPring中,REST终端是Spring MVC控制器。下面的Spring MVC控制器处理一个GET/request并返回一个简单的消息:

src/main/Java/com/example/authenticating LDAP/home controller . Java

包com . example . authenticating LDAP;

导入org . spring framework . web . bind . annotation . get mapping;

导入org . spring framework . web . bind . annotation . rest controller;

@RestController

公共类HomeController {

@GetMapping('/')

公共字符串索引(){

返回“欢迎来到主页!”;

}

}

整个类用@RestController标记,所以Spring MVC可以自动监控控制器(通过使用内置的扫描特性)并自动配置必要的web路径。

@RestController还通知Spring MVC把这篇文章直接写到HTTP。

应体,因为没有视图(view)。的确,当你访问这个页面,你将在浏览器得到一个简单的消息(因为此篇指南关注于使用LDAP防护页面)。

Build the Unsecured Web Application

在你防护web应用之前,你应该验证它是可以运作的。为了这么做,你需要定义某些关键bean,你可以通过创建一个Application类来这么做。如下所示:

src/main/java/com/example/authenticatingldap/AuthenticatingLdapApplication.java

package com.example.authenticatingldap;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class AuthenticatingLdapApplication {
  public static void main(String[] args) {
    SpringApplication.run(AuthenticatingLdapApplication.class, args);
  }
}

@SpringBootApplication是一个添加了如下展示的所有内容的方便注解:

  • @Configuration:对于应用上下文(context),将类标记为bean定义的来源。
  • @EnableAutoConfiguration:告诉Spring Boot开始根据类路径设置添加bean,其它bean,以及各种属性设置。例如,如果spring-webmvc在类路径中,这一注解将应用程序标记为web应用以及激活关键行为,例如设置DispatcherServlet
  • @ComponentScan:告诉Spring寻找com.example包下其它组件、配置以及服务,使其找到控制器。

main()方法使用Spring Boot的SpringApplication.run()方法来启动一个应用程序。你是否注意到没有一行的XML?也同样没有web.xml文件。这一个应用程序是100%纯Java并且你并没有必须处理配置任何一个plumbing或infrastructure。

Build an executable JAR

你可以在命令行以Gradle或Maven运行应用程序。你也可以构建一个单一可执行的JAR包,其中包含所有必须的依赖、类以及资源并且运行。构建一个可执行jar可以易于传输、版本和部署服务作为应用,贯穿至整个开发周期,穿插于不同环境等等。

如果你使用Gradle,你可以通过使用./gradlew bootRun来运行应用程序。或者说,你可以使用./gradlew build来构建JAR包,然后运行JAR包,如下命令:

java -jar build/libs/gs-authenticating-ldap-0.1.0.jar

如果你使用Maven,你可以通过./mvnw spring-boot:run来运行应用程序。或者说,你可以使用./mvnw clean package来构建JAR包,通过如下命令执行JAR包。

java -jar target/gs-authenticating-ldap-0.1.0.jar

此处步骤描述了创建一个可执行JAR包。你也可以构造一个经典的WAR文件。

如果你打开你的浏览器访问http://localhost:8080/,你应该看到如下平凡的文本:

Welcome to the home page!

Set up Spring Security

为了配置Spring Security,你首先需要添加一些额外的依赖在你的构建中。

对于基于Gradle构建,添加如下依赖到build.gradle文件:

implementation("org.springframework.boot:spring-boot-starter-security")
implementation("org.springframework.ldap:spring-ldap-core")
implementation("org.springframework.security:spring-security-ldap")
implementation("com.unboundid:unboundid-ldapsdk")

由于Gradle的一个artifact resolution问题,spring-tx必须被引入。否则,Gradle将获取一个无法运作的更老的版本。

对于基于Maven的构建,添加如下依赖到pom.xml文件:

<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>

这些依赖添加了Spring Security和UnboundId,一个开源的LDAP服务器。随着这些依赖的配置,你可以使用纯Java来配置你的安全策略,如下所示:

src/main/java/com/example/authenticatingldap/WebSecurityConfig.java

package com.example.authenticatingldap;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@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 BCryptPasswordEncoder())
          .passwordAttribute("userPassword");
  }
}

你可以使用WebSecurityConfigurer来自定义安全设置。在上面的示例中,这是由实现了WebSecurityConfigurer接口的WebSecurityConfigurerAdapter类,通过重写方法来完成的。

你也需要一个LDAP服务器。对于一个由纯Java编写的嵌入式服务器,Spring Boot提供自动配置,在此篇指南被使用。ldapAuthentication()方法配置,由于用户名在登录表单被插入到{0},以至于它在LDAP服务器搜索uid={0},ou=people,dc=springframework,dc=org。另外,passwordCompare()方法配置编码器和密码属性的名称。

Set up User Data

LDAP服务器可以使用LDIF(LDAP Data Interchange Format)文件交换用户数据。在application.properties内的spring.ldap.embedded.ldif属性使得Spring Boot拉入一个LDIF数据文件。这使得其可以轻松预加载演示数据。如下所示了application.properties配置项和一个LDIF文件工作样例:

src/main/resources/application.properties

spring.ldap.embedded.port=8389
spring.ldap.embedded.ldif=classpath:test-server.ldif
spring.ldap.embedded.base-dn=dc=springframework,dc=org

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=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: $2a$10$c6bSeWPhg06xB1lvmaWNNe4NROmZiSpYhlocU/98HNr2MhIOiSt36
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

对于生产系统,使用LDIF文件并不是标准配置。但是,它对于测试或指导是有用的。

如果你访问http://localhost:8080/,你应该被重定向到一个由Spring Security提供的登录页面。

输入用户名ben和密码benspassword。你应该看到如下消息:

Welcome to the home page!
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now