首页 > 其他分享 >SpringBoot集成LDAP认证登录

SpringBoot集成LDAP认证登录

时间:2023-11-20 18:34:21浏览次数:25  
标签:SpringBoot spring LDAP nacos springframework 认证 ldap org cloud

Maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>LdapSSO</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>LdapSSO</name>
    <description>LdapSSO</description>
    <properties>
        <java.version>17</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>3.0.2</spring-boot.version>
        <spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2022.0.0.0-RC2</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2022.0.0.0-RC2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-ldap</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.1.7</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.example.ldapsso.LdapSsoApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

配置文件 bootstrap.properties

# 应用服务 WEB 访问端口
server.port=8787
# 配置
spring.ldap.urls=ldap://localhost:389/
spring.ldap.username=uid=guotong,ou=people,dc=example,dc=com
spring.ldap.password=%tgb6YHN
spring.ldap.base=dc=example,dc=com
# 开启ldap的数据源支持
security.ldap.enable=true
# 配置Username的所属--唯一字段
spring.ldap.ldapAttrKeyName=uid
logging.level.org.springframework.ldap.core=DEBUG

spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos
spring.cloud.nacos.config.contextPath=/nacos
# 设置配置中心服务端地址
spring.cloud.nacos.config.server-addr=localhost:8848
# Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
spring.cloud.nacos.config.namespace=1c5ae1c6-cac5-40ef-b090-b4e9677ea2aa
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
spring.application.name=ldapsso-client
spring.profiles.active=dev
spring.cloud.nacos.discovery.group=cloud-test
spring.cloud.nacos.config.group=cloud-test
spring.cloud.nacos.config.file-extension=properties
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=1c5ae1c6-cac5-40ef-b090-b4e9677ea2aa

启动类

@SpringBootApplication
@EnableDiscoveryClient
public class LdapSsoApplication {

    public static void main(String[] args) {
        SpringApplication.run(LdapSsoApplication.class, args);
    }

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }



}

全局异常处理

package com.example.ldapsso.config;


import com.example.ldapsso.pojo.Resp;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLException;

/**
 * @description: 全局异常处理:
 * @author: GuoTong
 * @createTime: 2022-11-27 11:17
 * @since JDK 1.8 OR 11
 **/
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

    // 全局异常拦截
    @ExceptionHandler
    public Resp handlerException(Exception e) {
        e.printStackTrace();
        log.error("服务执行异常---->{}", e.getMessage());
        return Resp.error(e.getMessage());
    }


    @ExceptionHandler(value = SQLException.class)
    public Resp msgMySQLExecuteError(Exception e) {
        e.printStackTrace();
        log.error("Mysql执行异常");
        String message = e.getMessage();
        return Resp.error(message);
    }


    @ExceptionHandler(value = HttpMessageNotReadableException.class)
    public Resp msgNotFind(Exception e) {
        e.printStackTrace();
        log.error("请求错误");
        String message = e.getMessage();
        return Resp.error("请求内容未传递" + message);
    }
}

### LDAP配置 ldapConfig

```java
package com.example.ldapsso.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.core.support.LdapContextSource;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class ldapConfig {

    @Autowired
    private Environment environment;

    @Bean("ldapContextSource")
    public LdapContextSource ldapContextSourceLoad( ) {
        Map<String, Object> config = new HashMap();
        LdapContextSource ldapContextSource = new LdapContextSource();
        //  解决 乱码 的关键一句
        config.put("java.naming.ldap.attributes.binary", "objectGUID");
        ldapContextSource.setUrl(environment.getProperty("spring.ldap.urls"));
        ldapContextSource.setBase(environment.getProperty("spring.ldap.base"));
        ldapContextSource.setUserDn(environment.getProperty("spring.ldap.username"));
        ldapContextSource.setPassword(environment.getProperty("spring.ldap.password"));
        ldapContextSource.setAnonymousReadOnly(false);
        ldapContextSource.setPooled(true);
        ldapContextSource.setBaseEnvironmentProperties(config);
        return ldapContextSource;
    }

    /*
     * SpringLdap的javaConfig注入方式
     */
    @Bean
    public LdapTemplate ldapTemplate() {
        LdapTemplate ldapTemplate =null;
        try {
            System.setProperty("com.sun.jndi.ldap.object.disableEndpointIdentification", "true");
            System.setProperty("java.naming.ldap.attributes.binary", "objectSid");
            LdapContextSource contextSource = ldapContextSourceLoad();
            ldapTemplate = new LdapTemplate(contextSource);
            ldapTemplate.setIgnorePartialResultException(true);
        }catch (Exception e){
            e.printStackTrace();
        }
        return ldapTemplate;
    }


}

登录认证接口

@RestController
@RequestMapping("/index")
public class IndexController {
    @Autowired
    private LdapTemplate ldapTemplate;

    @GetMapping("/ldap")
    public Resp ldapLogin(@RequestParam("loginName") String loginName, @RequestParam("pwd") String pwd) {
        EqualsFilter filter = new EqualsFilter("uid", loginName);
        boolean authenticate = ldapTemplate.authenticate("", filter.toString(), pwd);
        if (!authenticate) {
            throw new RuntimeException("Ldap 认证不通过");
        }
        return Resp.Ok();
    }
}

标签:SpringBoot,spring,LDAP,nacos,springframework,认证,ldap,org,cloud
From: https://www.cnblogs.com/gtnotgod/p/17844558.html

相关文章

  • 基于springboot vue的宿舍管理系统
    项目源码免费获取方式放在文章末尾处项目技术数据库:Mysql5.7数据表:7张开发语言:Java(jdk1.8)开发工具:idea前端技术:Vue后端技术:SpringBoot 功能简介该项目是一个宿舍管理系统,分为管理员端,宿管员端。 管理员端:       登录        宿管模块            ......
  • springboot使用拦截器实现登录拦截
    参考文档https://blog.csdn.net/qq_50652600/article/details/127250413HandlerInterceptor作用:自定义拦截器如何创建:这个接口我们通常会自定义一个类。加上@Component注解,并且使它实现HandlerInterceptor接口(根据需求重写里面的三个方法)publicinterfaceHandlerInterceptor......
  • SpringBoot 策略模式 切换上传文件模式
    策略模式策略模式是指有一定行动内容的相对稳定的策略名称。我们定义一个接口(就比如接下来要实现的文件上传接口)我们定义所需要实现的策略实现类A、B、C、D(也就是项目中所使用的四种策略阿里云Oss上传、腾讯云Cos上传、七牛云Kodo上传、本地上传)我们通过策略上下文来调用策......
  • 2023第四季北京/杭州/青岛/深圳DAMA-CDGA/CDGP认证备考
    DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业竞争能力。DAMA是数据管理方面的认证,帮助数据从业者提升......
  • 2023第四季北京/杭州/青岛/深圳CDGP认证报名到这儿
    DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业竞争能力。DAMA是数据管理方面的认证,帮助数据从业者提升......
  • springboot 控制序列化反序列化示例(接口返回数据处理/接口接收数据处理)
    1.返回Long转JSONpackagecom.mingx.drone.config;importcom.fasterxml.jackson.core.JsonGenerator;importcom.fasterxml.jackson.databind.JsonSerializer;importcom.fasterxml.jackson.databind.SerializerProvider;importjava.io.IOException;/***@Descript......
  • 新建springboot项目,访问前端界面
    直接在IDEA中下载依赖会比较慢,将常用依赖下载到本地,然后从本地加载依赖会比较快。(方法可以搜,很多) pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&quo......
  • 华为设备_AAA认证
    拓扑图配置/验证1.本地AAA认证、授权,缺省域(telnet)AR1telnetAR2配置sysnameAR1#interfaceGigabitEthernet0/0/0ipaddress10.1.12.1255.255.255.0#sysnameAR2#aaalocal-userhciepasswordcipherhuawei@123local-userhcieprivilegelevel3local-userhci......
  • springboot3+vue3大事件的展示
    跟着黑马老师,做了一遍收获很大 ......
  • springboot解决跨域问题
    当看这个的时候应该就是遇到跨域问题了,下面是解决的代码`@ConfigurationpublicclassCorsConfig{//当前跨域请求最大有效时长。这里默认1天privatestaticfinallongMAX_AGE=24*60*60;@BeanpublicCorsFiltercorsFilter(){UrlBasedCorsConfigurationSo......