Spring security 集成ldap服务,实现统一验证

<span style="font-size:18px;">先说一下Spring security 是基于spring的一个强大的安全验证模块,它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能。</span>

LDAP是轻量目录访问协议,基于tcp/ip协议,一般为企业的基本信息的访问提供一个统一的访问方式,它存储的数据是以树形结构存储的,因此,访问速度超快,但是相对的存储速度很慢。当然,你肯定也不能使用sql语句了

首先说一下所需要的jar包,当然也有maven配置,网上应该有很多

spring-security-config

spring-security-core

spring-security-ldap

spring-security-taglibs

spring-security-web

好吧,开始要先配置spring-security,由于本身就是基于spring的,配置起来也很简单

首先在web,xml中配置一个security的filter:

<filter>

<filter-name>springSecurityFilterChain</filter-name>

<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>

</filter>

<filter-mapping>

<filter-name>springSecurityFilterChain</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

然后在spring-mvc文件里配置一个bean

<bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">

<constructor-arg>

<bean class="org.springframework.security.ldap.authentication.BindAuthenticator">

<constructor-arg ref="contextSource"/>

<property name="userSearch">

<bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">

<constructor-arg index="0" value=""/>

<constructor-arg index="1" value="(uid={0})"/>

<constructor-arg index="2" ref="contextSource"/>

</bean>

</property>

</bean>

</constructor-arg>

<constructor-arg>

<bean class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator">

<constructor-arg ref="contextSource"/>

<constructor-arg value="" />

<property name="defaultRole" value="ROLE_USER"/>

</bean>

</constructor-arg>

</bean>

同时需要配置ldap数据源:

<bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">

<constructor-arg value="ldap://192.168.0.1:389/dc=gnetis,dc=com"/>

<property name="userDn" value="cn=Manager,dc=gnetis,dc=com" />

<property name="password" value="admin"/>

</bean>

好的,然后还有一个spring-security.xml需要创建并配置:

<?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="http://www.springframework.org/schema/security"

xmlns:beans="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">

<!-- spring security -->

<http pattern="/login.jsp" security="none"/>

<http pattern="/resources/**" security="none"/>

<!-- 不启用安全验证 -->

<!-- <http pattern="/*" security="none"/> -->

<http auto-config=‘true‘>

<intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/>

<intercept-url pattern="/**" access="ROLE_USER" />

<form-login login-page="/login.jsp" login-processing-url="/loginProcess"

authentication-failure-url="/login.jsp?login_error=1"

default-target-url="/home/index" always-use-default-target="true" />

<logout logout-success-url="/login.jsp" delete-cookies="JSESSIONID"/>

<!--         Uncomment to limit the number of sessions a user can have -->

<session-management invalid-session-url="/login.jsp">

<concurrency-control max-sessions="1" error-if-maximum-exceeded="false" />

</session-management>

</http>

<authentication-manager>

<authentication-provider ref="ldapAuthProvider"></authentication-provider>

</authentication-manager>

</beans:beans>

一定要注意 xsi:schemaLocation的url地址的填写,否则各种错误。

其中,login.jsp是默认进入页面,home/index是默认页面的路径,

然后将在spring-mvc里配置的bean配置在authentication-manager里面,记得要写login.jsp,如:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<%@ page import="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter" %>

<%@ page import="org.springframework.security.core.AuthenticationException" %>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE html>

<html lang="en">

<head>

<base href="<%=basePath%>">

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1">

<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->

<meta name="description" content="">

<meta name="author" content="">

<link rel="icon" href="<%=basePath%>/resources/dist/img/favicon.ico">

<title>XXXXX</title>

<!-- Bootstrap core CSS -->

<link href="<%=basePath%>/resources/dist/css/bootstrap.min.css" rel="stylesheet">

<!-- Custom styles for this template -->

<link href="<%=basePath%>/resources/dist/css/signin.css" rel="stylesheet">

<!-- Just for debugging purposes. Don‘t actually copy these 2 lines! -->

<!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->

<script src="<%=basePath%>/resources/dist/js/ie-emulation-modes-warning.js"></script>

<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->

<!--[if lt IE 9]>

<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>

<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>

<![endif]-->

</head>

<body style="position:absolute;height:100%;background:#007788;">

<div class="container" style="border-top:3px solid #ccc;border-bottom:3px solid #ccc;border-right:5px solid #ccc;<c:if test="${lose==‘1‘}">border-right:5px solid #F22715;</c:if>background:#FFFFFF;margin-top:150px;color:#007788;opacity: 0.8;">

<div class="row featurette">

<div class="col-md-6">

<p style="color:#085D1F;font-weight:bold;font-size:48px;line-height:250px;text-align:center;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;全时运营中心</p>

</div>

<div class="col-md-6">

<form class="form-signin" id="f" name="f" action="<c:url value="/loginProcess" />" method="post">

<br>

<br>

<label for="inputEmail" class="sr-only">email</label>

<input type="text" id="inputEmail" name="j_username" class="form-control" placeholder="请输入邮箱" required autofocus>

<br>

<label for="inputPassword" class="sr-only">password</label>

<input type="password" id="inputPassword" name="j_password" class="form-control" placeholder="请输入密码" required>

<input name="_spring_security_remember_me" id="remember_me" type="checkbox"/>

<label for="remember_me">remember</label>

<input class="btn btn-lg btn-success btn-block" value="登录" type="submit"></input>

</form>

<c:if test="${not empty param.login_error}">

<p class="text-center" style="color:red;">

登录失败:<%= ((AuthenticationException) session.getAttribute(UsernamePasswordAuthenticationFilter.SPRING_SECURITY_LAST_EXCEPTION_KEY)).getMessage() %>

</p>

</c:if>

</div>

</div>

<br>

<br>

</div>

<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->

<script src="<%=basePath%>/resources/dist/js/ie10-viewport-bug-workaround.js"></script>

</body>

</html>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-03 21:15:07

Spring security 集成ldap服务,实现统一验证的相关文章

单点登录CAS与Spring Security集成(数据库验证,向客户端发送更多信息)

准备工作 CAS server从网上直接下载下来,里面有一个cas-server-webapp的工程,使用Maven命令构建,导入到Eclipse中,便可以直接使用,cas server我使用的是3.5.2版本.客户端,我是使用以前的工程,只要是Web工程就行,cas-client使用的3.2.1,Spring Security使用的是3.1.4,记得Spring Security的3.1.2版本和CAS集成时,当需要CAS Server传比较多的信息给客户端时,客户端的Spring Secur

jwt和spring security集成

1.用户登陆,通过spring security验证用户(WebSecurityConfigurerAdapter的configure(AuthenticationManagerBuilder)方法),并且进行授权(WebSecurityConfigurerAdapter的configure(HttpSecurity)).并且根据拦截器,不需要对其验证token. 验证: public void configure(AuthenticationManagerBuilder auth) throw

spring security使用hibernate进行查询数据库验证

前面查询数据库采用的都是jdbc方式,如果系统使用的是hibernate,该如何进行呢,下面就是实现步骤,关键还是实现自定义的UserDetailsService 项目结构如下: 使用hibernate,pom.xml文件如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLo

Spring Security框架下Restful Token的验证方案

项目使用Restful的规范,权限内容的访问,考虑使用Token验证的权限解决方案. 验证方案(简要概括): 首先,用户需要登陆,成功登陆后返回一个Token串: 然后用户访问有权限的内容时需要上传Token串进行权限验证 代码方案: Spring MVC + Spring Security + Redis的框架下实现权限验证,此文重点谈谈Spring Security下的Token验证实现. 首先,看看spring security的配置: <http pattern="/service

redis jwt spring boot spring security 实现api token 验证

文章地址:http://www.haha174.top/article/details/258083 项目源码:https://github.com/haha174/jwt-token.git 具体的实际效果可以看考这里 目前已经部署一个 个人测试机器上面: http://cloud.codeguoj.cn/api-cloud-server/swagger-ui.html#!/token45controller/loginUsingPOST 相信很多人都调用过api, 一般的大致基本步骤都是先用

Spring Security LDAP简介

1.概述 在本快速教程中,我们将学习如何设置Spring Security LDAP. 在我们开始之前,了解一下LDAP是什么? - 它代表轻量级目录访问协议.它是一种开放的,与供应商无关的协议,用于通过网络访问目录服务. 2. Maven Dependency 首先,让我们看看我们需要的maven依赖项: <dependency> <groupId>org.springframework.security</groupId> <artifactId>spr

[转]Spring Security学习总结一

[总结-含源码]Spring Security学习总结一(补命名空间配置) Posted on 2008-08-20 10:25 tangtb 阅读(43111) 评论(27)  编辑  收藏 所属分类: Spring .Spring Security Spring Security学习总结一 在认识Spring Security之前,所有的权限验证逻辑都混杂在业务逻辑中,用户的每个操作以前可能都需要对用户是否有进行该项 操作的权限进行判断,来达到认证授权的目的.类似这样的权限验证逻辑代码被分散

Spring Security学习总结

1.Spring Security介绍  一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分. 用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统.用户认证一般要求用户提供用户名和密码.系统通过校验用户名和密码来完成认证过程. 用户授权指的是验证某个用户是否有权限执行某个操作.在一个系统中,不同用户所具有的权限是不同的.比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改.一般来说,系统

Spring Security安全框架

今天来简单介绍一下Spring Security安全框架 简介 Spring Security 提供了基于javaEE的企业应有个你软件全面的安全服务.这里特别强调支持使用SPring框架构件的项目,Spring框架是企业软件开发javaEE方案的领导者.如果你还没有使用Spring来开发企业应用程序,我们热忱的鼓励你仔细的看一看.熟悉Spring特别是一来注入原理两帮助你更快更方便的使用Spring Security. 人们使用Spring Secruity的原因有很多,单大部分都发现了jav