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;"> 全時運營中心</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>
相關推薦
Spring security 整合ldap服務,實現統一驗證
<span style="font-size:18px;">先說一下Spring security 是基於spring的一個強大的安全驗證模組,它提供了一組可以在Spring應用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反轉Invers
Spring Boot+Spring Security專案開發(三):實現簡訊驗證碼登入
說在前面 博主最近會有很多專案跟大家一起分享,做完後會上傳github上的,希望讀友們能給博主提提意見哈哈 這個專案是第三方登入和安全方面的,關於後臺與app和網站的登入連線操作的實戰專案 各位如果可以就給我star哈哈謝謝啦 實
Spring Boot 整合dubbo與zookeeper實現不同專案之間資料通過服務的傳遞
一、安裝zookeeper 1、下載路徑:http://mirrors.hust.edu.cn/apache/zookeeper/ 可以自己選擇版本進行下載(同時支援windows和linux) 2、目錄結構 3、修改conf下的配置檔案zoo.cfg 4、
Spring Security 整合freemaker 實現簡單登入和角色控制
寫這篇文章是因為我做了一個電商網站專案,近期剛加上許可權控制。整個過程很簡單,在此給大家梳理一下,也算是自己對知識點的一個總結。 一、需求分析: 我們都知道,電商網站在許可權這一塊,有兩大塊內容: 1、使用者未登入,部分頁面拒絕訪問(
spring boot 1.5.4 整合shiro+cas,實現單點登入和許可權控制
1.安裝cas-server-3.5.2 官網:https://github.com/apereo/cas/releases/tag/v3.5.2 注意: 輸入 <tomcat_key> 的金鑰口令 (如果和金鑰庫口令相同, 按回車) ,這裡直接回車,也採用keystore密碼changei
spring boot security oauth2 jwt 服務端實現
最近在寫提供給第三方的登入和獲取資源,老大說要使用oauth2 協議,因此最近在啃這一塊。一下是個人的配置。 首先要理解什麼是OAUTH2協議。 以下是阮一峰大大的文章:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.htm
spring security整合cas實現單點登入
spring security整合cas 0.配置本地ssl連線 操作記錄如下: =====================1.建立證書檔案thekeystore ,並匯出為thekeystore.crt cd C:\Users\23570\keystore C:\Users\23570\keystore&
ubuntu 12.04 簡單配置samba服務,實現主機與虛擬機互通(設置Windows虛擬盤)
完成 sam inux ... conf restart bridged 要求 system 環境: virtualbox ubuntu12.04 首先,如果你到這步了,說明你的window與linux的網絡已經配好了,他們之間是可以互相Ping通的,如果沒有,請看我以
LINUX系統服務器上搭建DHCP服務,實現兩大基本功能:1,自動分配ip;2,手工指定ip
完成 重啟 釋放 p地址 進行 基本功 blog process 自動 在linux系統服務器上搭建DHCP服務,實現兩大基本功能:1,自動分配ip地址;2,手動指定ip地址。首先準備兩臺虛擬機作為實驗對象,一個linux系統作為服務器,一個windows7系統作為客戶機,
搭建FTP服務,實現三種方式的訪問:1.匿名訪問;2,本地用戶訪問;3虛擬用戶訪問。
行程 工作環境 能夠 ftp用戶 a10 linu 進入 編輯 binary FTP服務(File Transfer Protocol,文件傳輸協議)是典型的C/S結構 的應用層協議,需要由服務端軟件,客戶端軟件兩部分共同實 現文件
linux系統搭建郵件服務,實現收發郵件功能。
hat6 傳輸代理 windows vol 解決 tex proc 域名空間 named 搭建postfix郵件系統服務互聯網中的電子郵件系統並不是一個孤立的體系,需要DNS服務器提供郵件域的解析,郵件收取,傳遞等功能也是由不同的組件來提供的。郵件系統的角色MTA(郵件傳輸
ldap+flask+python2實現統一認證裏面的那些編碼神坑
color pattern 統一 sys and enc 都是 什麽 bin 首先想吐槽下,直接接手別人的項目,而且是經過四五個人手的項目,是怎麽個痛苦。兩三套代碼django、flask、tornado應有盡有,代碼裏,掰開手指頭就可數的全英文註釋,幾臺服務
Spring Could 2.0 eureka 配置spring.security後其他服務無法連線註冊中心
Eureka的Server端和Client端成功啟動,服務註冊、發現都正常。但是在Client端向Server端請求註冊服務時,需要驗證使用者名稱和密碼,問題出現。 分析原因 查資料瞭解到新版(Spring Cloud 2.0 以上)的securit
SSM框架整合Apache Shiro,實現安全登入驗證和許可權驗證功能
第一部分 Apache Shiro的簡介 1、什麼是 apache shiro : Apache Shiro是一個功能強大且易於使用的Java安全框架,提供了認證,授權,加密,和會話管理 如同 spring security 一樣都是是一個許可權安全框架,但是與Spri
IOS開發-基於WebDriverAgent代理服務,實現iOS手機app自動化測試的框架搭建
導引 iOS自動化測試一直使用的appium,iOS系統升級至10.0 Xcode8.0之後,改用WebDriverAgent代理服務作為server,編寫了一套基於WebDriverAgent服務 app客戶端自動化框架。並實現了自動化測試app的demo。 一:整體框架設計 首先是WebDriver
springSecurity的學習筆記--使用spring-Security完成“記住我”,單機session管理,叢集session管理,登出
今天課外的大部分空餘時間都用來了整理springSecurity練習的筆記。 整理了一部分,還差一些這裡補上! 記住我功能要素: springsecurity提供了一個記住我的功能。 它的大致原理是,攔截器檢測是
Linux搭建FTP服務,實現只上傳,不下載
筆者最近收到一個需求,搭建Linux上的Ftp服務,但是隻能上傳,不能下載,且使用者不能跳開Ftp,通過Sftp來獲得檔案。大致看了些網上分享。通過配置,完成這個“奇葩”需求。 首先跳開Ftp,使用Sftp那麼可以通過設定虛擬賬戶來實現。 其次Ftp上只上傳,不下載,那麼通過配置Ft
Spring Security的高階認識,在上一篇我們已經初步的瞭解到了Spring Secuity
2 自定義登入成功處理 預設情況下,登入成功後,Spring Security 會跳轉到之前引發登入的那個請求上。 AuthenticationSuccessHandler @Component("myAuthenticationSuccessHandler") public class
Spring Boot 整合Mybatis時,mapper一直無法注入
今天在使用spring boot整合mybatis時一直無法注入mapper,不管怎麼配置註解掃描包等,都不行,移動了Application這個類也不行。後來發現了應該不是Spring Boot掃描包的問題,因為我不管怎麼配置,改程式碼除錯都會報那個錯,於是去pom.xml檔
Spring-Security整合CAS之Spring-Security.xml部分配置詳解
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://w