python單點登錄
⑴ django_cas單點登錄問題,大神來探討探討
進入%python_HOME%/lib/site-packages/django.cas-2.1.1-py2.7.egg/django_cas,打開views.py,將
from django.http import 後面的get_host刪去,並把文件中所有的get_host(request)替換為request.get_host()
最近也在玩,也遇到了問題,在測試伺服器上怎麼配置https
⑵ 誰能介紹一些單點登錄系統
tomcat的的下載地址http://www.apache.org/dist/jakarta/tomcat-4/
1、安裝jdk,詳細操作請參考本站windows 2k和redhat 8.0下java環境配置
2、如何修改埠號
使用文本編輯器如EditPlus,打開server.xml文件,查找到
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="20000"
useURIValidationHack="false" disableUploadTimeout="true" />
將其中的8080,改成80,然後重啟tomcat,本機使用http://localhost即可訪問。
註:其他版本,查找相應的8080,然後修改。
3、修改發布目錄
例如將d:\test目錄作為自己的文檔發布目錄,並指定mytest為http訪問的相對目錄(本機即http://localhost/mytest)。
同上要修改server.xml文件,找到
<!-- Tomcat Root Context -->
<!--
<Context path="" docBase="ROOT" debug="0"/>
-->
去掉注釋,或者將已經屏蔽掉的<Context path="" docBase="ROOT" debug="0"/> 復制到下面的空白處,這時候復制的文本已經可以彩色亮顯。根據例子中的要求,修改這段文本如下:
<Context path="/mytest" docBase="d:\test" debug="0"/>
然後重啟tomcat,本機即可通過http://localhost/mytest來訪問放在d:\test目錄下的JSP文件。
總結:
如上例中發布目錄結構整體結構如下:
d:\test┄┄JSP文件
│
└/WEB-INF┄┄web.xml
│
└/classes┈┈JavaBean/Servlet文件
│
└myPackages(包路徑) ┈┈JavaBean/Servlet文件
Tomcat配置技巧Top 10
2004-01-09 17:19:25
作者:Jason Brittain & Ian F. Darwin
出處:http://www.orielly.com
譯者:陳光
2003-12-31
編者按:現在開發Java Web應用,建立和部署Web內容是一件很簡單的工作。使用Jakarta Tomcat作為Servlet和JSP容器的人已經遍及全世界。Tomcat具有免費、跨平台等諸多特性,並且更新得很快,現在非常的流行。
你所需要做的就是:按照你的需求配置Tomcat,只要你正確配置,Tomcat一般都能適合你的要求。下面是一系列關於Tomcat的配置技巧,這些技巧源自於我的書:《Tomcat權威指南》,希望對你有所幫助。—— Jason Brittain
1. 配置系統管理(Admin Web Application)
大多數商業化的J2EE伺服器都提供一個功能強大的管理界面,且大都採用易於理解的Web應用界面。Tomcat按照自己的方式,同樣提供一個成熟的管理工具,並且絲毫不遜於那些商業化的競爭對手。Tomcat的Admin Web Application最初在4.1版本時出現,當時的功能包括管理context、data source、user和group等。當然也可以管理像初始化參數,user、group、role的多種資料庫管理等。在後續的版本中,這些功能將得到很大的擴展,但現有的功能已經非常實用了。
Admin Web Application被定義在自動部署文件:CATALINA_BASE/webapps/admin.xml 。
(譯者註:CATALINA_BASE即tomcat安裝目錄下的server目錄)
你必須編輯這個文件,以確定Context中的docBase參數是絕對路徑。也就是說,CATALINA_BASE/webapps/admin.xml 的路徑是絕對路徑。作為另外一種選擇,你也可以刪除這個自動部署文件,而在server.xml文件中建立一個Admin Web Application的context,效果是一樣的。你不能管理Admin Web Application這個應用,換而言之,除了刪除CATALINA_BASE/webapps/admin.xml ,你可能什麼都做不了。
如果你使用UserDatabaseRealm(默認),你將需要添加一個user以及一個role到CATALINA_BASE/conf/tomcat-users.xml 文件中。你編輯這個文件,添加一個名叫「admin」的role 到該文件中,如下:
<role name="admin"/>
你同樣需要有一個用戶,並且這個用戶的角色是「admin」。象存在的用戶那樣,添加一個用戶(改變密碼使其更加安全):
<user name="admin" password="deep_dark_secret" roles="admin"/>
當你完成這些步驟後,請重新啟動Tomcat,訪問http://localhost:8080/admin,你將看到一個登錄界面。Admin Web Application採用基於容器管理的安全機制,並採用了Jakarta Struts框架。一旦你作為「admin」角色的用戶登錄管理界面,你將能夠使用這個管理界面配置Tomcat。
2.配置應用管理(Manager Web Application)
Manager Web Application讓你通過一個比Admin Web Application更為簡單的用戶界面,執行一些簡單的Web應用任務。
Manager Web Application被被定義在一個自動部署文件中:
CATALINA_BASE/webapps/manager.xml 。
你必須編輯這個文件,以確保context的docBase參數是絕對路徑,也就是說CATALINA_HOME/server/webapps/manager的絕對路徑。
(譯者註:CATALINA_HOME即tomcat安裝目錄)
如果你使用的是UserDatabaseRealm,那麼你需要添加一個角色和一個用戶到CATALINA_BASE/conf/tomcat-users.xml文件中。接下來,編輯這個文件,添加一個名為「manager」的角色到該文件中:
<role name=」manager」>
你同樣需要有一個角色為「manager」的用戶。像已經存在的用戶那樣,添加一個新用戶(改變密碼使其更加安全):
<user name="manager" password="deep_dark_secret" roles="manager"/>
然後重新啟動Tomcat,訪問http://localhost/manager/list,將看到一個很樸素的文本型管理界面,或者訪問http://localhost/manager/html/list,將看到一個HMTL的管理界面。不管是哪種方式都說明你的Manager Web Application現在已經啟動了。
Manager application讓你可以在沒有系統管理特權的基礎上,安裝新的Web應用,以用於測試。如果我們有一個新的web應用位於/home/user/hello下在,並且想把它安裝到 /hello下,為了測試這個應用,我們可以這么做,在第一個文件框中輸入「/hello」(作為訪問時的path),在第二個文本框中輸入「file:/home/user/hello」(作為Config URL)。
Manager application還允許你停止、重新啟動、移除以及重新部署一個web應用。停止一個應用使其無法被訪問,當有用戶嘗試訪問這個被停止的應用時,將看到一個503的錯誤——「503 - This application is not currently available」。
移除一個web應用,只是指從Tomcat的運行拷貝中刪除了該應用,如果你重新啟動Tomcat,被刪除的應用將再次出現(也就是說,移除並不是指從硬碟上刪除)。
3.部署一個web應用
有兩個辦法可以在系統中部署web服務。
1> 拷貝你的WAR文件或者你的web應用文件夾(包括該web的所有內容)到$CATALINA_BASE/webapps目錄下。
2> 為你的web服務建立一個只包括context內容的XML片斷文件,並把該文件放到$CATALINA_BASE/webapps目錄下。這個web應用本身可以存儲在硬碟上的任何地方。
如果你有一個WAR文件,你若想部署它,則只需要把該文件簡單的拷貝到CATALINA_BASE/webapps目錄下即可,文件必須以「.war」作為擴展名。一旦Tomcat監聽到這個文件,它將(預設的)解開該文件包作為一個子目錄,並以WAR文件的文件名作為子目錄的名字。接下來,Tomcat將在內存中建立一個context,就好象你在server.xml文件里建立一樣。當然,其他必需的內容,將從server.xml中的DefaultContext獲得。
部署web應用的另一種方式是寫一個Context XML片斷文件,然後把該文件拷貝到CATALINA_BASE/webapps目錄下。一個Context片斷並非一個完整的XML文件,而只是一個context元素,以及對該應用的相應描述。這種片斷文件就像是從server.xml中切取出來的context元素一樣,所以這種片斷被命名為「context片斷」。
舉個例子,如果我們想部署一個名叫MyWebApp.war的應用,該應用使用realm作為訪問控制方式,我們可以使用下面這個片斷:
<!--
Context fragment for deploying MyWebApp.war
-->
<Context path="/demo" docBase="webapps/MyWebApp.war"
debug="0" privileged="true">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Context>
把該片斷命名為「MyWebApp.xml」,然後拷貝到CATALINA_BASE/webapps目錄下。
這種context片斷提供了一種便利的方法來部署web應用,你不需要編輯server.xml,除非你想改變預設的部署特性,安裝一個新的web應用時不需要重啟動Tomcat。
4.配置虛擬主機(Virtual Hosts)
關於server.xml中「Host」這個元素,只有在你設置虛擬主機的才需要修改。虛擬主機是一種在一個web伺服器上服務多個域名的機制,對每個域名而言,都好象獨享了整個主機。實際上,大多數的小型商務網站都是採用虛擬主機實現的,這主要是因為虛擬主機能直接連接到Internet並提供相應的帶寬,以保障合理的訪問響應速度,另外虛擬主機還能提供一個穩定的固定IP。
基於名字的虛擬主機可以被建立在任何web伺服器上,建立的方法就是通過在域名伺服器(DNS)上建立IP地址的別名,並且告訴web伺服器把去往不同域名的請求分發到相應的網頁目錄。因為這篇文章主要是講Tomcat,我們不準備介紹在各種操作系統上設置DNS的方法,如果你在這方面需要幫助,請參考《DNS and Bind》一書,作者是Paul Albitz and Cricket Liu (O'Reilly)。為了示範方便,我將使用一個靜態的主機文件,因為這是測試別名最簡單的方法。
在Tomcat中使用虛擬主機,你需要設置DNS或主機數據。為了測試,為本地IP設置一個IP別名就足夠了,接下來,你需要在server.xml中添加幾行內容,如下:
<Server port="8005" shutdown="SHUTDOWN" debug="0">
<Service name="Tomcat-Standalone">
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"/>
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8443" minProcessors="5" maxProcessors="75"
acceptCount="10" debug="0" scheme="https" secure="true"/>
<Factory className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory"
clientAuth="false" protocol="TLS" />
</Connector>
<Engine name="Standalone" defaultHost="localhost" debug="0">
<!-- This Host is the default Host -->
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="ROOT" debug="0"/>
<Context path="/orders" docBase="/home/ian/orders" debug="0"
reloadable="true" crossContext="true">
</Context>
</Host>
<!-- This Host is the first "Virtual Host": www.example.com -->
<Host name="www.example.com" appBase="/home/example/webapp">
<Context path="" docBase="."/>
</Host>
</Engine>
</Service>
</Server>
Tomcat的server.xml文件,在初始狀態下,只包括一個虛擬主機,但是它容易被擴充到支持多個虛擬主機。在前面的例子中展示的是一個簡單的server.xml版本,其中粗體部分就是用於添加一個虛擬主機。每一個Host元素必須包括一個或多個context元素,所包含的context元素中必須有一個是默認的context,這個默認的context的顯示路徑應該為空(例如,path=」」)。
5.配置基礎驗證(Basic Authentication)
容器管理驗證方法控制著當用戶訪問受保護的web應用資源時,如何進行用戶的身份鑒別。當一個web應用使用了Basic Authentication(BASIC參數在web.xml文件中auto-method元素中設置),而有用戶訪問受保護的web應用時,Tomcat將通過HTTP Basic Authentication方式,彈出一個對話框,要求用戶輸入用戶名和密碼。在這種驗證方法中,所有密碼將被以64位的編碼方式在網路上傳輸。
注意:使用Basic Authentication通過被認為是不安全的,因為它沒有強健的加密方法,除非在客戶端和伺服器端都使用HTTPS或者其他密碼加密碼方式(比如,在一個虛擬私人網路中)。若沒有額外的加密方法,網路管理員將能夠截獲(或濫用)用戶的密碼。但是,如果你是剛開始使用Tomcat,或者你想在你的web應用中測試一下基於容器的安全管理,Basic Authentication還是非常易於設置和使用的。只需要添加<security-constraint>和<login-config>兩個元素到你的web應用的web.xml文件中,並且在CATALINA_BASE/conf/tomcat-users.xml 文件中添加適當的<role>和<user>即可,然後重新啟動Tomcat。
下面例子中的web.xml摘自一個俱樂部會員網站系統,該系統中只有member目錄被保護起來,並使用Basic Authentication進行身份驗證。請注意,這種方式將有效的代替Apache web伺服器中的.htaccess文件。
<!--
Define the Members-only area, by defining
a "Security Constraint" on this Application, and
mapping it to the subdirectory (URL) that we want
to restrict.
-->
<security-constraint>
<web-resource-collection>
<web-resource-name>
Entire Application
</web-resource-name>
<url-pattern>/members/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>member</role-name>
</auth-constraint>
</security-constraint>
<!-- Define the Login Configuration for this Application -->
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>My Club Members-only Area</realm-name>
</login-config>
6.配置單點登錄(Single Sign-On)
一旦你設置了realm和驗證的方法,你就需要進行實際的用戶登錄處理。一般說來,對用戶而言登錄系統是一件很麻煩的事情,你必須盡量減少用戶登錄驗證的次數。作為預設的情況,當用戶第一次請求受保護的資源時,每一個web應用都會要求用戶登錄。如果你運行了多個web應用,並且每個應用都需要進行單獨的用戶驗證,那這看起來就有點像你在與你的用戶搏鬥。用戶們不知道怎樣才能把多個分離的應用整合成一個單獨的系統,所有他們也就不知道他們需要訪問多少個不同的應用,只是很迷惑,為什麼總要不停的登錄。
Tomcat 4的「single sign-on」特性允許用戶在訪問同一虛擬主機下所有web應用時,只需登錄一次。為了使用這個功能,你只需要在Host上添加一個SingleSignOn Valve元素即可,如下所示:
<Valve className="org.apache.catalina.authenticator.SingleSignOn"
debug="0"/>
在Tomcat初始安裝後,server.xml的注釋裡麵包括SingleSignOn Valve配置的例子,你只需要去掉注釋,即可使用。那麼,任何用戶只要登錄過一個應用,則對於同一虛擬主機下的所有應用同樣有效。
使用single sign-on valve有一些重要的限制:
1> value必須被配置和嵌套在相同的Host元素里,並且所有需要進行單點驗證的web應用(必須通過context元素定義)都位於該Host下。
2> 包括共享用戶信息的realm必須被設置在同一級Host中或者嵌套之外。
3> 不能被context中的realm覆蓋。
4> 使用單點登錄的web應用最好使用一個Tomcat的內置的驗證方式(被定義在web.xml中的<auth-method>中),這比自定義的驗證方式強,Tomcat內置的的驗證方式包括basic、digest、form和client-cert。
5> 如果你使用單點登錄,還希望集成一個第三方的web應用到你的網站中來,並且這個新的web應用使用它自己的驗證方式,而不使用容器管理安全,那你基本上就沒招了。你的用戶每次登錄原來所有應用時需要登錄一次,並且在請求新的第三方應用時還得再登錄一次。當然,如果你擁有這個第三方web應用的源碼,而你又是一個程序員,你可以修改它,但那恐怕也不容易做。
6> 單點登錄需要使用cookies。
7.配置用戶定製目錄(Customized User Directores)
一些站點允許個別用戶在伺服器上發布網頁。例如,一所大學的學院可能想給每一位學生一個公共區域,或者是一個ISP希望給一些web空間給他的客戶,但這又不是虛擬主機。在這種情況下,一個典型的方法就是在用戶名前面加一個特殊字元(~),作為每位用戶的網站,比如:
http://www.cs.myuniversity.e/~username
http://members.mybigisp.com/~username
Tomcat提供兩種方法在主機上映射這些個人網站,主要使用一對特殊的Listener元素。Listener的className屬性應該是org.apache.catalina.startup.UserConfig,userClass屬性應該是幾個映射類之一。如果你的系統是Unix,它將有一個標準的/etc/passwd文件,該文件中的帳號能夠被運行中的Tomcat很容易的讀取,該文件指定了用戶的主目錄,使用PasswdUserDatabase 映射類。
<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html"
userClass="org.apache.catalina.startup.PasswdUserDatabase"/>
web文件需要放置在像/home/users/ian/public_html 或者 /users/jbrittain/public_html一樣的目錄下面。當然你也可以改變public_html 到其他任何子目錄下。
實際上,這個用戶目錄根本不一定需要位於用戶主目錄下裡面。如果你沒有一個密碼文件,但你又想把一個用戶名映射到公共的像/home一樣目錄的子目錄裡面,則可以使用HomesUserDatabase類。
<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html" homeBase="/home"
userClass="org.apache.catalina.startup.HomesUserDatabase"/>
這樣一來,web文件就可以位於像/home/ian/public_html 或者 /home/jasonb/public_html一樣的目錄下。這種形式對Windows而言更加有利,你可以使用一個像c:\home這樣的目錄。
這些Listener元素,如果出現,則必須在Host元素裡面,而不能在context元素裡面,因為它們都用應用於Host本身。
8.在Tomcat中使用CGI腳本
Tomcat主要是作為Servlet/JSP容器,但它也有許多傳統web伺服器的性能。支持通用網關介面(Common Gateway Interface,即CGI)就是其中之一,CGI提供一組方法在響應瀏覽器請求時運行一些擴展程序。CGI之所以被稱為通用,是因為它能在大多數程序或腳本中被調用,包括:Perl,Python,awk,Unix shell scripting等,甚至包括Java。當然,你大概不會把一個Java應用程序當作CGI來運行,畢竟這樣太過原始。一般而言,開發Servlet總要比CGI具有更好的效率,因為當用戶點擊一個鏈接或一個按鈕時,你不需要從操作系統層開始進行處理。
Tomcat包括一個可選的CGI Servlet,允許你運行遺留下來的CGI腳本。
為了使Tomcat能夠運行CGI,你必須做如下幾件事:
1. 把servlets-cgi.renametojar (在CATALINA_HOME/server/lib/目錄下)改名為servlets-cgi.jar。處理CGI的servlet應該位於Tomcat的CLASSPATH下。
2. 在Tomcat的CATALINA_BASE/conf/web.xml 文件中,把關於<servlet-name> CGI的那段的注釋去掉(默認情況下,該段位於第241行)。
3. 同樣,在Tomcat的CATALINA_BASE/conf/web.xml文件中,把關於對CGI進行映射的那段的注釋去掉(默認情況下,該段位於第299行)。注意,這段內容指定了HTML鏈接到CGI腳本的訪問方式。
4. 你可以把CGI腳本放置在WEB-INF/cgi 目錄下(注意,WEB-INF是一個安全的地方,你可以把一些不想被用戶看見或基於安全考慮不想暴露的文件放在此處),或者你也可以把CGI腳本放置在context下的其他目錄下,並為CGI Servlet調整cgiPathPrefix初始化參數。這就指定的CGI Servlet的實際位置,且不能與上一步指定的URL重名。
5. 重新啟動Tomcat,你的CGI就可以運行了。
在Tomcat中,CGI程序預設放置在WEB-INF/cgi目錄下,正如前面所提示的那樣,WEB-INF目錄受保護的,通過客戶端的瀏覽器無法窺探到其中內容,所以對於放置含有密碼或其他敏感信息的CGI腳本而言,這是一個非常好的地方。為了兼容其他伺服器,盡管你也可以把CGI腳本保存在傳統的/cgi-bin目錄,但要知道,在這些目錄中的文件有可能被網上好奇的沖浪者看到。另外,在Unix中,請確定運行Tomcat的用戶有執行CGI腳本的許可權。
9.改變Tomcat中的JSP編譯器(JSP Compiler)
在Tomcat 4.1(或更高版本,大概),JSP的編譯由包含在Tomcat裡面的Ant程序控制器直接執行。這聽起來有一點點奇怪,但這正是Ant有意為之的一部分,有一個API文檔指導開發者在沒有啟動一個新的JVM的情況下,使用Ant。這是使用Ant進行Java開發的一大優勢。另外,這也意味著你現在能夠在Ant中使用任何javac支持的編譯方式,這里有一個關於Apache Ant使用手冊的javac page列表。使用起來是容易的,因為你只需要在<init-param> 元素中定義一個名字叫「compiler」,並且在value中有一個支持編譯的編譯器名字,示例如下:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>
org.apache.jasper.servlet.JspServlet
</servlet-class>
<init-param>
<param-name>logVerbosityLevel</param-name>
<param-value>WARNING</param-value>
</init-param>
<init-param>
<param-name>compiler</param-name>
<param-value>jikes</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
當然,給出的編譯器必須已經安裝在你的系統中,並且CLASSPATH可能需要設置,那處決於你選擇的是何種編譯器。
10.限制特定主機訪問(Restricting Access to Specific Hosts)
有時,你可能想限制對Tomcat web應用的訪問,比如,你希望只有你指定的主機或IP地址可以訪問你的應用。這樣一來,就只有那些指定的的客戶端可以訪問服務的內容了。為了實現這種效果,Tomcat提供了兩個參數供你配置:RemoteHostValve 和RemoteAddrValve。
通過配置這兩個參數,可以讓你過濾來自請求的主機或IP地址,並允許或拒絕哪些主機/IP。與之類似的,在Apache的httpd文件里有對每個目錄的允許/拒絕指定。
例如你可以把Admin Web application設置成只允許本地訪問,設置如下:
<Context path="/path/to/secret_files" ...>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127.0.0.1" deny=""/>
</Context>
如果沒有給出允許主機的指定,那麼與拒絕主機匹配的主機就會被拒絕,除此之外的都是允許的。與之類似,如果沒有給出拒絕主機的指定,那麼與允許主機匹配的主機就會被允許,除此之外的都是拒絕的。
隨著java的流行,其在web上的應用也越來越廣,tomcat作為一個開源的servlet容器,應用前景越來越廣,本文將向你講述tomcat的一些知識。
一:簡介
tomcat是jakarta項目中的一個重要的子項目,其被JavaWorld雜志的編輯選為2001年度最具創新的java產品(Most Innovative Java Proct),同時它又是sun公司官方推薦的servlet和jsp容器(具體可以見http://java.sun.com/procts/jsp/tomcat/),因此其越來越多的受到軟體公司和開發人員的喜愛。servlet和jsp的最新規范都可以在tomcat的新版本中得到實現。
二:安裝及配置
tomcat最新版本為4.0.1,這個版本用了一個新的servlet容器Catalina,完整的實現了servlet2.3和jsp1.2規范。注意安裝之前你的系統必須安裝了jdk1.2以上版本。
(一):安裝
1:windows平台
從tomcat網站下載jakarta-tomcat-4.0.1.exe,按照一般的windows程序安裝步驟即可安裝好tomcat,安裝時它會自動尋找你的jdk和jre的位置。
2:linux平台
下載jakarta-tomcat-4.0.1.tar.gz,將其解壓到一個目錄。
(二):配置
運行tomcat需要設置JAVA_HOME變數
set JAVA_HOME=c:/jdk (win98,在msdos方式下使用,或者放入autoexec.bat中)
export JAVA_HOME=/usr/local/jdk (linux下使用,放到/etc/bashrc或者/etc/profile中)
(三):運行
設置完畢後就可以運行tomcat伺服器了,進入tomcat的bin目錄,win98下用startup啟動tomcat,linux下用startup.sh,相應的關閉tomcat的命令為shutdown和shutdown.sh。
啟動後可以在瀏覽器中輸入http://localhost:8080/測試,由於tomcat本身具有web伺服器的功能,因此我們不必安裝apache,當然其也可以與apache集成到一起,下面會介紹。
下面你可以測試其自帶的jsp和servlet示例。
三:應用
(一):目錄結構
tomcat的目錄結構如下: 目錄名 簡介
bin 存放啟動和關閉tomcat腳本
conf 包含不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xml
work 存放jsp編譯後產生的class文件
webapp 存放應用程序示例,以後你要部署的應用
另外還有像Eclipse、WebSphere、WebLogic這樣的IDE環境,就不一一介紹了!
⑶ 有人用python寫過ldap的登錄和修改密碼嗎
你說的是AD域賬號吧?先安裝lpda3的庫
在cmd命令行下運行:
pin install ldap3
然後開始寫python腳本
fromldap3import*
user="CN=visitor02 ,OU=level1,DC=hello,DC=com,DC=cn" # 定義你要給誰改密碼
admin='xxxxxx' #xxxx換成你域控的管理員賬號如helloadministrator, hello是域名
adminpwd = 'xxxx' #域控的管理員密碼
s=Server('10.10.xx.xx',get_info=ALL,use_ssl=True) #10.10.xx.xx換成你域控的IP地址,這條是定義域伺服器信息
c=Connection(s,user=admin,password=adminpwd,auto_bind=True) #登錄域伺服器
print(c.extend.microsoft.modify_password(user,"123456")) #這行就是改密碼。如果print出true,就是成功了。如果false,再在下面加一條
print(c.response) #會顯示為什麼失敗。
如果想了解更多的python ldap3庫,可以看這個鏈接網頁鏈接
⑷ 課工場真的好嗎
課程還是不錯,就那java來說,包含了6大極端,273個知識點,包含了微服架構,分布式架構,還有容器技術,很多機構沒有這些課程,也教不了這些課程,
第一階段:java基本功修煉
1. 認識計算機硬體
2. 計算機組成原理
3. 計算機軟體知識
4. 計算機網路知識
5. 常用網路應用操作
6. 認識計算機病毒
7. 邏輯訓練
8. 初識Java
9. 變數和數據類型
10. 選擇結構
11. 循環結構for
12. 循環結構do-while
13. 循環結構while
14. 多重循環及程序調試
15. 循環進階
16. 一維數組及經典應用
17. 二維數組
18. 認識類與對象
19. 方法及方法重載
20. 封裝與繼承
21. 方法重寫與多態
22. 項目實戰-汽車租賃系統
23. 抽象類和介面
24. 異常
25. 項目實戰-QuickHit
26. Java 中的集合類型
27. List 集合
28. Set 集合
29. HashMap 集合
30. Iterator
31. Collections 演算法類及常用方法
32. enum
33. 包裝類及裝箱拆箱
34. String、StringBuffer 類常用方法操作字元串
35. Date、Calendar
36. Math 類常用方法
37. IO/NIO
38. 位元組輸入流(InputStream、FileInputStream、BufferedInputStream)
39. 位元組輸出流(OutputStream、FileOutputStream、BufferedOutputStream)
40. 字元輸入流(Reader、InputStreamReader、FileReader BufferedReader)
41. 位元組輸出流(Writer、OutputStreamWriter、FileWriter、BufferedWriter)
42. 文件復制
43. Serialize、Deserialize
44. 職場晉升力:四象限時間管理與精力管理
45. 多線程(Thread、Runnable)
46. Thread LifeCycle
47. 線程的調度
48. 線程的同步和死鎖
49. Thread Pool
50. 職場晉升力:團隊合作
51. Socket(TCP、UDP)
52. XML 概念、優勢、規范
53. XML 中特殊字元的處理
54. 使用DOM 讀取、添加、刪除、解析 XML 數據
第二階段:javaweb開發
55. 搭建和配置MySQL 資料庫
56. 資料庫增、刪、查、改語句
57. 事務
58. 視圖
59. 資料庫備份與恢復
60. 資料庫用戶管理
61. 資料庫設計
62. 項目實戰-銀行ATM 存取款機系統
63. 走進 HTML 和CSS
64. 列表表格及表單美化
65. CSS 高級操作
66. Bootstrap
67. CSS 組件
68. JavaScript 面向對象
69. JavaScript 判斷、循環
70. JavaScript 閉包
71. JavaScript 語法
72. Bootstrap 綜合案例
73. HTML5、CSS3
74. jQuery 基礎
75. jQuery 基本操作
76. jQuery 事件與特效
77. jQuery Ajax
78. jQuery 插件
79. 搭建Web 環境初識JSP
80. JSP 九大內置對象
81. JSP 實現數據傳遞和保存
82. JDBC
83. 單例模式、工廠模式
84. MVC、三層模式
85. Commons-fileupload、CKEditor
86. 分頁查詢
87. EL 與 JSTL
88. Servlet 與Filter
89. Listener 與MVC
90. Ajax 與 jQuery
91. jQuery 的Ajax 交互擴展
92. 項目實戰—使用Ajax 技術改進新聞發布系統
93. 反射
94. Linux 系統的安裝
95. 在Linux 中管理目錄和文件
96. 在Linux 中管理用戶和許可權
97. 在Linux 伺服器環境下安裝軟體和部署項目
98. 職場晉升力:職場溝通
第三階段: 企業級框架開發
99. MyBatis 環境搭建
100. SQL 映射文件
101. 動態SQL
102. MyBatis 框架原理
103. Spring IOC
104. 構造注入、依賴注入、註解
105. Spring 整合MyBatis(SqlSessionTemplate、MapperFactoryBean、事務
處理)
106. Spring 數據源(屬性文件、JNDI)、Bean 作用域
107. Spring 框架的運行原理
108. SpringMVC 體系概念
109. SpringMVC 之數據綁定、數據效驗、
110. SpringMVC 之視圖及視圖解析
111. SpringMVC 之文件上傳、本地化解析
112. SpringMVC 之靜態資源處理、請求攔截器、異常處理
113. Oracle 資料庫環境搭建、安裝
114. Oracle 資料庫 SQL、分頁、備份、還原
115. Hibernate 概念、依賴
116. HQL 查詢語言
117. Hibernate 中配置關聯映射
118. HQL 連接查詢與 Hibernate 註解
119. Struts 2 概念、依賴
120. Struts 2 配置
121. OGNL 表達式
122. Struts 2 攔截器
123. SSH 框架整合
124. 使用Maven 構建項目
125. 使用Struts 2 實現Ajax
126. Jsoup 網路爬蟲
127. 多線程網路爬蟲
128. 反爬及反反爬策略
129. 通用爬蟲設計
130. Echart 圖表分析
131. IKAnalyzer 分詞
132. 企業框架項目實戰-代理商管理系統
133. 企業框架項目實戰-SL 會員商城
134. 企業框架項目實戰-會員管理系統
135.企業框架項目實戰-互聯網招聘信息採集分析平台
第四階段: 前後端分離開發
136. GitHub
137. Git 基礎(checkout、pull、commit、push、merge 等)
138. Git 進階(多分支協作)
139. GitLab
140. IDEA 的使用
141. Maven 介紹(概念、倉庫、構建、命令)
142. 使用Maven 構建WEB 項目
143. 使用Maven 構建多模塊項目
144. 使用Maven 搭建私服倉庫
145. Scrum 框架介紹(三個角色、三個工件、四個會議)
146. Scrum Team 組建團隊
147. 產品需求和用戶故事
148. 每日立會
149. 使用敏捷-Scrum 方式開發管理實戰
150. 前後端分離、分布式集群架構、垂直架構
151. SSM(SpringMVC+Spring+MyBatis)整合實戰
152. Git、Maven 私服Nexus
153. 第三方接入技術(微信、阿里)
154. MySQL 電商實戰
155. Redis(緩存服務)
156. 搜索引擎-Solr
157. 集成API Doc 工具-Swagger
158. 圖片自動化處理:Tengine+LUA+GraphicsMagic
159. 手機、郵箱注冊
160. 單點登錄 Token
161. OAuth2.0 認證
162. Jsoup 網路爬蟲(多線程爬蟲/代理 IP 爬蟲)
163. ExecutorService 線程池
164. IK 中文分詞
165. Postman
166. ReactJS
167. webpack
168. 職場晉升力:簡歷撰寫
169. 程序猿面試寶典之項目面試
170.大型互聯網旅遊電商項目實戰-愛旅行
第五階段: 分布式微服架構開發
171. Spring Boot 環境搭建
172. Spring Boot 常用技能
173. Spring Boot 整合Redis
174. Spring Boot 整合Mybatis
175. 微服務架構及架構設計
176. 消息隊列
ActiveMQ\RabbitMQ
177. 分布式事務
178. 分布式鎖 Redis-setnx
179. Zookeeper 注冊中心
180. 基於 ActiveMQ 實現高並發
181. Docker 環境搭建
182. Docker 鏡像加速
183. Docker 容器管理
184. Docker 鏡像管理
185. Docker 容器文件備份
186. Dockerfile
187. Docker 私服倉庫
188. 真實互聯網高並發電商項目實戰-雙十一搶購
189. 可視化監控 Portainer
190. Docker Compose 容器編排
191. Docker Compose 擴容、縮容
192. Docker Swarm 集群編排
193. Jenkins 安裝、插件配置
194. Jenkins 配置普通任務
195. Jenkins 配置管道任務
196. Jenkins 自動發布服務
197. Spring Cloud Eureka
198. Spring Cloud Feign
199. Spring Cloud Ribbon
200. Spring Cloud Zuul
201. Spring Cloud Config
202. Spring Cloud Hystrix
203. Spring Cloud Sleuth
204. Spring Boot Admin
205.Eureka 注冊原理探秘
206. Spring Cloud 大坑解讀
207. Zipkin
208. Zipkin 整合RabbitMQ
209. Zipkin 整合MySQL
210. ELK 日誌收集
211.Kafka
212. Elasticsearch 映射管理
213. Elasticsearch 查詢/復合查詢
214. Elasticsearch 集群/集群規劃
215. Elasticsearch 聚合
216. Elasticsearch 集群監控
217. Elasticsearch 插件
(Head/BigDesk)
218. Mycat 讀寫分離
219. Mycat 一主多從
220. Mycat 多主多從
221. Mycat 數據分片
222. Redis
223. Redis-Redlock
224. Elasticsearch 環境搭建
225. Elasticsearch 客戶端
226. Elasticsearch 索引管理
227. Elasticsearch 文檔管理
228. Mycat 集群
229. Jmeter 並發測試
230. Jmeter 生成測試報告
231. 微信登錄
232. 微信支付
233. 支付寶支付
234. 網路地圖
235. Sonar 本地檢測
236. Sonar +Jenkins 線上檢測
237. CI/CD
238. Spring Boot 改造愛旅行項目實戰
239. 大型互聯網票務類電商項目實戰-大覓網
240. ES6 概念(les、const)
241. ES6 對象和數組
242. ES6 函數擴展
243. VUE 環境搭建
244. VUE.JS 指令
245.VUE 交互
246. VUE 實例生命周期
247. VUE 組件
248. VUE 項目環境配置及單文件組件
249.VUE 路由
第六階段:cc服務
250. Spring Cloud Gateway
251. Consul
252. Nacos
253. Eureka、Consu、lNacos、Zookeeper 對比分析
254. Prometheus + Grafana
255. ES 分布式存儲原理
256. NoSQL 資料庫解決方案(Redis、MongoDB)
257. OAuth2.0 認證( authorization code 模式)
258. OAuth2.0 認證( implicit 模式)
259. OAuth2.0 認證( resource owner password credentials 模式)
260. OAuth2.0 認證( client credentials 模式)
261. NAS/FastDFS 分布式文件存儲
262. Python 基礎
263. Python 爬蟲
264. 大數據及 Hadoop 概述
265. 分布式文件系統 HDFS
266. 分布式計算框架MapRece
267. 分布式列式資料庫 HBase
268. Hadoop 綜合應用
269. 面試大局觀
270. 職業規劃
271. 項目面試
272. 具體業務場景化解決方案
273. 更多技術專題持續增加中
如果有不同意見的兄弟,請@舵哥
⑸ 我在使用python下的flask框架 但是我要怎麼實現sso登錄
單點登錄跟登錄其實差不多,理解了登錄也可以搞出單點登錄
回顧
在前面的系列章節中,我們創建了一個資料庫並且學著用用戶和郵件來填充,但是到現在我們還沒能夠植入到我們的程序中。 兩章之前,我們已經看到怎麼去創建網路表單並且留下了一個實現完全的登陸表單。
在這篇文章中,我們將基於我門所學的網路表單和資料庫來構建並實現我們自己的用戶登錄系統。教程的最後我們小程序會實現新用戶注冊,登陸和退出的功能。
為了能跟上這章節,你需要前一章節最後部分,我們留下的微博程序。請確保你的程序已經正確安裝和運行。
在前面的章節,我們開始配置我們將要用到的Flask擴展。為了登錄系統,我們將使用兩個擴展,Flask-Login 和 Flask-OpenID. 配置如下所示 (fileapp\__init__.py):
import os
from flaskext.login import LoginManager
from flaskext.openid import OpenID
from config import basedir
lm = LoginManager()
lm.setup_app(app)
oid = OpenID(app, os.path.join(basedir, 'tmp'))
Flask-OpenID 擴展為了可以存儲臨時文件,需要一個臨時文件夾路徑。為此,我們提供了它的位置。
重訪我們的用戶模型
Flask-Login擴展需要在我們的User類里實現一些方法。除了這些方法以外,類沒有被要求實現其它方法。
下面是我們的User類 (fileapp/models.py):
class User(db.Model):
id = db.Column(db.Integer, primary_key = True)
nickname = db.Column(db.String(64), unique = True)
email = db.Column(db.String(120), unique = True)
role = db.Column(db.SmallInteger, default = ROLE_USER)
posts = db.relationship('Post', backref = 'author', lazy = 'dynamic')
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
return unicode(self.id)
def __repr__(self):
return '<User %r>' % (self.name)
is_authenticated方法是一個誤導性的名字的方法,通常這個方法應該返回True,除非對象代表一個由於某種原因沒有被認證的用戶。
is_active方法應該為用戶返回True除非用戶不是激活的,例如,他們已經被禁了。
is_anonymous方法應該為那些不被獲准登錄的用戶返回True。
最後,get_id方法為用戶返回唯一的unicode標識符。我們用資料庫層生成唯一的id。
用戶載入回調
現在我們通過使用Flask-Login和Flask-OpenID擴展來實現登錄系統
首先,我們需要寫一個方法從資料庫載入到一個用戶。這個方法會被Flask-Login使用(fileapp/views.py):
@lm.user_loader
def load_user(id):
return User.query.get(int(id))
記住Flask-Login里的user id一直是unicode類型的,所以在我們把id傳遞給Flask-SQLAlchemy時,有必要把它轉化成integer類型。
登錄視圖函數
接下來我們要更新登錄視圖函數(fileapp/views.py):
from flask import render_template, flash, redirect, session, url_for, request, g
from flaskext.login import login_user, logout_user, current_user, login_required
from app import app, db, lm, oid
from forms import LoginForm
from models import User, ROLE_USER, ROLE_ADMIN
@app.route('/login', methods = ['GET', 'POST'])
@oid.loginhandler
def login():
if g.user is not None and g.user.is_authenticated():
return redirect(url_for('index'))
form = LoginForm()
if form.validate_on_submit():
session['remember_me'] = form.remember_me.data
return oid.try_login(form.openid.data, ask_for = ['nickname', 'email'])
return render_template('login.html',
title = 'Sign In',
form = form,
providers = app.config['OPENID_PROVIDERS'])
注意到我們導入了一些新的模塊,其中有些後面會用到。
跟上個版本的變化很小。我們給視圖函數添加了一個新的裝飾器:oid.loginhandler。它告訴Flask-OpenID這是我們的登錄視圖函數。
在方法體的開頭,我們檢測是是否用戶是已經經過登錄認證的,如果是就重定向到index頁面。這兒的思路是如果一個用戶已經登錄了,那麼我們不會讓它做二次登錄。
全局變數g是Flask設置的,在一個request生命周期中,用來存儲和共享數據的變數。所以我猜你已經想到了,我們將把已經登錄的用戶放到g變數里。
我們在調用redirect()時使用的url_for()方法是Flask定義的從給定的view方法獲取url。如果你想重定向到index頁面,你h很可能使用redirect('/index'),但是我們有很好的理由讓Flask為你構造url。
當我們從登錄表單得到返回數據,接下來要運行的代碼也是新寫的。這兒我們做兩件事。首先我們保存remember_me的布爾值到Flask的session中,別和Flask-SQLAlchemy的db.session混淆了。我們已經知道在一個request的生命周期中用Flask的g對象來保存和共享數據。沿著這條線路Flask的session提供了更多,更復雜的服務。一旦數據被保存到session中,它將在同一客戶端發起的這次請求和這次以後的請求中永存而不會消亡。數據將保持在session中直到被明確的移除。為了做到這些,Flask為每個客戶端建立各自的session。
下面的oid.try_login是通過Flask-OpenID來執行用戶認證。這個方法有兩個參數,web表單提供的openid和OpenID provider提供的我們想要的list數據項。由於我們定義了包含nickname和email的User類,所以我們要從找nickname和email這些項。
基於OpenID的認證是非同步的。如果認證成功,Flask-OpenID將調用有由oid.after_login裝飾器注冊的方法。如果認證失敗那麼用戶會被重定向到login頁面。
Flask-OpenID登錄回調
這是我們實現的after_login方法(app/views.py)
@oid.after_login
def after_login(resp):
if resp.email is None or resp.email == "":
flash('Invalid login. Please try again.')
redirect(url_for('login'))
user = User.query.filter_by(email = resp.email).first()
if user is None:
nickname = resp.nickname
if nickname is None or nickname == "":
nickname = resp.email.split('@')[0]
user = User(nickname = nickname, email = resp.email, role = ROLE_USER)
db.session.add(user)
db.session.commit()
remember_me = False
if 'remember_me' in session:
remember_me = session['remember_me']
session.pop('remember_me', None)
login_user(user, remember = remember_me)
return redirect(request.args.get('next') or url_for('index'))
傳給after_login方法的resp參數包含了OpenID provider返回的一些信息。
第一個if聲明僅僅是為了驗證。我們要求一個有效的email,所以一個沒有沒提供的email我們是沒法讓他登錄的。
接下來,我們將根據email查找資料庫。如果email沒有被找到我們就認為這是一個新的用戶,所以我們將在資料庫中增加一個新用戶,做法就像我們從之前章節學到的一樣。注意我們沒有處理nickname,因為一些OpenID provider並沒有包含這個信息。
做完這些我們將從Flask session中獲取remember_me的值,如果它存在,那它是我們之前在login view方法中保存到session中的boolean類型的值。
然後我們調用Flask-Login的login_user方法,來注冊這個有效的登錄。
最後,在最後一行我們重定向到下一個頁面,或者如果在request請求中沒有提供下個頁面時,我們將重定向到index頁面。
跳轉到下一頁的這個概念很簡單。比方說我們需要你登錄才能導航到一個頁面,但你現在並未登錄。在Flask-Login中你可以通過login_required裝飾器來限定未登錄用戶。如果一個用戶想連接到一個限定的url,那麼他將被自動的重定向到login頁面。Flask-Login將保存最初的url作為下一個頁面,一旦登錄完成我們便跳轉到這個頁面。
做這個工作Flask-Login需要知道用戶當前在那個頁面。我們可以在app的初始化組件里配置它(app/__init__.py):
lm = LoginManager()
lm.setup_app(app)
lm.login_view = 'login'
全局變數g.user
如果你注意力很集中,那麼你應該記得在login view方法中我們通過檢查g.user來判斷一個用戶是否登錄了。為了實現這個我們將使用Flask提供的before_request事件。任何一個被before_request裝飾器裝飾的方法將會在每次request請求被收到時提前與view方法執行。所以在這兒來設置我們的g.user變數(app/views.py):
@app.before_request
def before_request():
g.user = current_user
這就是它要做的一切,current_user全局變數是被Flask-Login設定的,所以我們只需要把它拷貝到更容易被訪問的g變數就OK了。這樣,所有的請求都能訪問這個登錄的用戶,甚至於內部的模板。
index視圖
在之前的章節中我們用假代碼遺留了我們的index視圖,因為那個時候我們系統里並沒有用戶和博客文章。現在我們有用戶了,所以,讓我們來完成它吧:
@app.route('/')
@app.route('/index')
@login_required
def index():
user = g.user
posts = [
{
'author': { 'nickname': 'John' },
'body': 'Beautiful day in Portland!'
},
{
'author': { 'nickname': 'Susan' },
'body': 'The Avengers movie was so cool!'
}
]
return render_template('index.html',
title = 'Home',
user = user,
posts = posts)
在這個方法中只有兩處變動。首先,我們增加了login_required裝飾器。這樣表明了這個頁面只有登錄用戶才能訪問。
另一個改動是把g.user傳給了模板,替換了之間的假對象。
現在可以運行我們的應用了。
當我們連接到你將會看到登陸頁面。記著如果你通過OpenID登錄那麼你必須使用你的提供者提供的OpenID URL。你可以下面URL中的任何一個OpenID provider來為你產生一個正確的URL。
作為登錄進程的一部分,你將會被重定向到OpenID提供商的網站,你將在那兒認證和授權你共享給我們應用的一些信息(我們只需要email和nickname,放心,不會有任何密碼或者其他個人信息被曝光)。
一旦登錄完成你將作為已登錄用戶被帶到index頁面。
試試勾選remember_me復選框。有了這個選項當你在瀏覽器關閉應用後重新打開時,你還是已登錄狀態。
注銷登錄
我們已經實現了登錄,現在是時候來實現注銷登錄了。
注銷登錄的方法灰常簡單(file app/views.py):
@app.route('/logout')
def logout():
logout_user()
return redirect(url_for('index'))
但我們在模板中還沒有注銷登錄的鏈接。我們將在base.html中的頂部導航欄添加這個鏈接(file app/templates/base.html):
<html>
<head>
{% if title %}
<title>{{title}} - microblog</title>
{% else %}
<title>microblog</title>
{% endif %}
</head>
<body>
<div>Microblog:
<a href="{{ url_for('index') }}">Home</a>
{% if g.user.is_authenticated() %}
| <a href="{{ url_for('logout') }}">Logout</a>
{% endif %}
</div>
<hr>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for message in messages %}
<li>{{ message }} </li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
{% block content %}{% endblock %}
</body>
</html>
這是多麼多麼簡單啊,我們只需要檢查一下g.user中是否有一個有效的用戶,如果有我們就添加註銷鏈接。在我們的模板中我們再一次使用了url_for方法。
最後的話
我們現在有了一個全功能的用戶登錄系統。在下一章中,我們將創建用戶的個人資料頁,並顯示用戶的頭像。
⑹ python報錯urllib.error.URLError: <urlopen error unknown url type: src="https>,Windows系統怎麼解決
jango站點使用django_cas接入SSO(單點登錄系統),配置完成後登錄,拋出「urlopen error unknown url type: https」異常。尋根朔源發現是python內置的urllib模塊不支持https協議。
>>> import urllib
>>> urllib.urlopen('htom')
<addinfourl at 269231456 whose fp = <socket._fileobject object at 0xff98250>>
>>> urllib.urlopen('hm')
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
File "/usr/local/python27/lib/python2.7/urllib.py", line 86, in urlopen
return opener.open(url)
File "/usr/local/python27/lib/python2.7/urllib.py", line 204, in open
return self.open_unknown(fullurl, data)
File "/usr/local/python27/lib/python2.7/urllib.py", line 216, in open_unknown
raise IOError, ('url error', 'unknown url type', type)
IOError: [Errno url error] unknown url type: 'https'
之所以python內置的urllib模塊不支持https協議是因為編譯安裝python之前沒有編譯安裝類似於openssl這樣的SSL庫,以至於python不支持SSL
因為我用的是Centos系統所以安裝openssl-devel
sudo yum install openssl-devel
之後重新編譯Python
./configure(可選,因為之前已經配置過,按之前的配置來就行了,而且最好按之前的配置配編譯安裝以免依賴的庫需要重新編譯安裝。)
make
make install
>>> import urllib
>>> urllib.urlopen('htt.com')
沒有再報同樣的錯誤。
在安裝完openssl-devel後重新編譯python前也有說需要編輯Moles文件夾內Setup.dist文件的
修改
# Socket mole helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
#SSL=/usr/local/ssl
#_ssl _ssl.c \
# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
# -L$(SSL)/lib -lssl -lcrypto
為
# Socket mole helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
但實際測試下來好像並不需要修改這個文件,編譯的時候能自動將SSL庫編譯進python中。
另外需要特別注意的是,重新編譯安裝python後,通過可執行文件名(可能是個連接文件)運行python可能運行的還是老的python,這是因為可執行文件名沒有連接到新的python可執行程序。因此要用最新的python可執行文件名或指向該名字的連接來運行python。
重新編譯安裝python後有可能導致需要重新編譯django,MySQLdb,pycrypto,python-ldap,django-auth-ldap,django_cas,django_cas,pymongo等一些列依賴python的模塊。這里要特別注意
⑺ 代碼0基礎先學哪個WEB、python、JAVA
--java處理json,最經典的做法還是將String字元串轉換成對象來處理。
---需要藉助第三方jar包,常見的第三方json處理jar包有:阿里巴巴的fastjson,谷歌的gson----還有諸如jackson之類的。
---------
零基礎學習java可按照這份大綱來進行學習
第一階段:Java專業基礎課程
----------
階段目標:
1. 熟練掌握Java的開發環境與編程核心知識
2. 熟練運用Java面向對象知識進行程序開發
3. 對Java的核心對象和組件有深入理解
4. 熟練應用JavaAPI相關知識
5. 熟練應用JAVA多線程技術
6. 能綜合運用所學知識完成一個項目
知識點:
1、基本數據類型,運算符,數組,掌握基本數據類型轉換,運算符,流程式控制制。
2、數組,排序演算法,Java常用API,類和對象,了解類與對象,熟悉常用API。
3、面向對象特性,集合框架,熟悉面向對象三大特性,熟練使用集合框架。
4、IO流,多線程。
5、網路協議,線程運用。
---------
第二階段:JavaWEB核心課程
階段目標:
1. 熟練掌握資料庫和MySQL核心技術
2. 深入理解JDBC與DAO資料庫操作
3. 熟練運用JSP及Servlet技術完成網站後台開發
4. 深入理解緩存,連接池,註解,反射,泛型等知識
5. 能夠運用所學知識完成自定義框架
知識點:
1、資料庫知識,範式,MySQL配置,命令,建庫建表,數據的增刪改查,約束,視圖,存儲過程,函數,觸發器,事務,游標,建模工具。
2、深入理解資料庫管理系統通用知識及MySQL資料庫的使用與管理。為Java後台開發打下堅實基礎。Web頁面元素,布局,CSS樣式,盒模型,JavaScript,jQuery。
3、掌握前端開發技術,掌握jQuery。
4、Servlet,EL表達式,會話跟蹤技術,過濾器,FreeMarker。
5、掌握Servlet相關技術,利用Servlet,JSP相關應用技術和DAO完成B/S架構下的應用開發。
6、泛型,反射,註解。
7、掌握JAVA高級應用,利用泛型,註解,枚舉完成自己的CRUD框架開發為後續框架學習做鋪墊。
8、單點登錄,支付功能,項目整合,分頁封裝熟練運用JSP及Servlet核心知識完成項目實戰。
---------
第三階段:JavaEE框架課程
階段目標:
1. 熟練運用Linux操作系統常見命令及完成環境部署和Nginx伺服器的配置
2. 熟練運用JavaEE三大核心框架:Spring,SpringMVC,MyBatis
3. 熟練運用Maven,並使用SpringBoot進行快速框架搭建
4. 深入理解框架的實現原理,Java底層技術,企業級應用等
5. 使用Shiro,Ztree和Spring,SpringMVC,Myts完成企業項目
知識點:
1、Linux安裝配置,文件目錄操作,VI命令,管理,用戶與許可權,環境部署,Struts2概述,hiberante概述。
2、Linux作為一個主流的伺服器操作系統,是每一個開發工程師必須掌握的重點技術,並且能夠熟練運用。
3、SSH的整合,MyBatis,SpringMVC,Maven的使用。
4、了解AOP原理,了解中央控制器原理,掌握MyBatis框架,掌握SSM框架的整合。
5、Shiro,Ztree,項目文檔,項目規范,需求分析,原型圖設計,資料庫設計,工程構建,需求評審,配置管理,BUG修復,項目管理等。
6、獨立自主完成一個中小型的企業級綜合項目的設計和整體架構的原型和建模。獨立自主完成一個大型的企業級綜合項目,並具備商業價值
⑻ python腳本自動登錄單點登錄系統
頁面類繼承 驗證用戶或者cookie的類