1. 程式人生 > >Spring security 整合ldap服務,實現統一驗證

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>

相關推薦

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