原文地址:http://my.oschina.net/baochanghong/blog/394873
SSO 即Single sign on/off,单点登录/退出
CAS 全称JA-SIG Central Authentication Service,实现SSO的开源项目
1. 概述
1.1背景
单点登录是必须的,实现方式颇多,这里就说使用CAS的实现方式。使用CAS实现SSO,网络上说明很多,大部分都是从制作证书开始,而实际上是可以不使用HTTPS验证,这样更方便。
单点登录的原理是通过拦截你设定的URL,并跳转到你指定的CAS SERVER登录页,当你登录成功后,带着TICKET,返回到你打开的URL。然后你就可以一票在手,畅通无阻。
网上有个家伙用旅游的套票来解释单点登录,非常形象。当你到达一个旅游区门口,你可以买一个套票,套票规定你可以游览N个景点,进入这些景点的时候,你不需要再买票,也就实现了单点登录。
同时,也可以借用这个比喻说明一下单点注销。当你打开一个应用A时,单击了注销按钮,跳转到http://hostname:port/cas/logout 或者https://hostname:port/cas/logout ,系统显示注销成功。此时,IE窗口没有关闭,你继续打开应用A,仍然没有注销成功,不需要登录。这就相当于你已经在旅游景点内,即使你把套票撕毁了,你仍然可以继续参观这个景点,不会把你驱逐出去。但是,你再也进不了其它的景点了。
那么怎么实现立即生效的注销呢?或者这种方式是否就满足我们的需求呢?
1.2环境
Windows XP、JDK1.6.03、Tomcat6.0.20
注意:配置好环境变量。
1.3下载资源
服务器端:http://www.ja-sig.org/downloads/cas
当前最新版本是3.3.4,测试安装的版本为3.3.3
cas-server-3.3.3-release.zip
客户端:https://www.ja-sig.org/svn/cas-clients/
cas-client-2.0.11.zip JAVA支持单点登录
cas-client-3.1.8-release.zip JAVA支持单点注销
dotnet-client DOTNET支持类
phpcas PHP支持
注意:同时要下载源代码,部分功能需要修改源代码,重新做包。
2. 配置CAS SERVER
CAS SERVER目录介绍。
2.1简单配置
把你下载cas-server解压,进入cas-server-3.3\modules,复制cas-server-webapp-3.3.war到tomcat\webapps下,修改名称为cas.war,方便使用,原来的名字太长了。然后启动IE,输入http://localhost:8080/cas检验是否可以访问,如果可以,则输入相同的用户名和密码,比如cas/cas,测试是否能登录。
如果你对安全性要求不高且急不可待,这个时候就可以直接进行CAS CLIENT的配置。
2.2数据库验证配置
简单配置后,可以使用相同的用户名和密码,进行登录。这个不实际,可以通过配置实现连接自己的数据库进行配置。这里有个前提,就是所有系统需要使用相同的用户表和密码加密方法,可以使用CAS自带的加密方法(\org\jasig\cas\authentication\handler\ DefaultPasswordEncoder.class)或自己用JAVA写的加密方法。
进入目录tomcat\webapps\cas\WEB-INF,打开文件deployerConfigContext.xml,找到类似下面的代码:
注意:cas-server根据版本不同,文件的路径或BEAN位置可能不同,逐个文件夹找下。
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
这是默认的方法。同时还有两种可选,如下:
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="casDataSource" />
<property name="sql" value="select password from tbUser where lower(name) = lower(?)" />
</bean>
/************************************************************************/
<bean class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"
abstract="false" lazy-init="default" autowire="default" dependency-check="default">
<property name="dataSource" ref="casDataSource" />
<property name="tableUsers" value="tbUser" />
<property name="fieldUser" value="u_userid"/>
<property name="fieldPassword" value="u_password"/>
<property name="passwordEncoder" ref="passwordEncoder"/>
</bean>
以上两种方式都经过测试。另外,也可以写出自己的方法验证,修改BEAN的CLASS属性即可。如果没有密码没有加密,则可以把参数<property name="passwordEncoder" ref="passwordEncoder"/>去掉。
下面针对最下面的方法进行说明。
看它的属性,还需要定义两个BEAN,数据源和加密,如下:
<bean id="casDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<!—SQL SERVER
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property>
<property name="url" value="jdbc:sqlserver://10.7.3.90:1433;DatabaseName=itacc"></property>
<property name="username" value="zero" />
<property name="password" value="123456" />
–>
<!–ORACLE à
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@10.7.3.90:1521:orcl"></property>
<property name="username" value="zero"></property>
<property name="password" value="123456"></property>
<property name="maxActive" value="100"></property>
<property name="maxIdle" value="30"></property>
<property name="maxWait" value="500"></property>
<property name="defaultAutoCommit" value="true"></property>
</bean>
<!—加密à
<bean id="passwordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">
<constructor-arg value="MD5"/>
</bean>
由于CAS-SERVER.WAR默认没有采用数据库加密,所以部分JAR包,没有引入,下面这些需要复制到webapps\cas\WEB-INF\lib里面:
Cas-server-support-jdbc-3.3.3.jar
Cas-server-support-ldap-3.3.3.jar
Commons-dbcp.jar
Commons-pool.jar
Org.springframework.jdbc-3.0.0.M4.jar //spring要根据自己的版本选择
Org.springframework.transaction-3.0.0.M4.jar
Sqljdbc.jar //数据库连接JAR,根据自己的复制
Oraclejdbc.jar
完成以后,用户表数据准备好后,可以运行http://localhost:8080/cas进行登录测试。这个时候很容易出现错误,多数是因为JAR包问题,注意查看tomcat\logs日志文件,进行检查,问题很容易解决。
2.3参数配置
这里只说明一下我涉及到的参数,可能有更多参数,目前还没有用到。
1、tomcat\webapps\cas\WEB-INF\deployerConfigContext.xml
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:httpClient-ref="httpClient"/>
增加参数p:requireSecure="false",是否需要安全验证,即HTTPS,false为不采用,加上去之后如下:
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:httpClient-ref="httpClient" p:requireSecure="false"/>
2、Tomcat 6.0\webapps\cas\WEB-INF\spring-configuration\
ticketGrantingTicketCookieGenerator.xml
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="true"
p:cookieMaxAge="-1"
p:cookieName="CASTGC"
p:cookiePath="/cas" />
参数p:cookieSecure="true",同理为HTTPS验证相关,TRUE为采用HTTPS验证,与deployerConfigContext.xml的参数保持一致。
参数p:cookieMaxAge="-1",简单说是COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的IE窗口有效,IE关闭或重新打开其它窗口,仍会要求验证。可以根据需要修改为大于0的数字,比如3600等,意思是在3600秒内,打开任意IE窗口,都不需要验证。
warnCookieGenerator.xml
<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="true"
p:cookieMaxAge="-1"
p:cookieName="CASPRIVACY"
p:cookiePath="/cas" />
两个参数与上面同理。
3、TICKET的生命周期也可以在web.xml加这个参数实现:
<!– Timeout for granting tickets –>
<context-param>
<param-name>edu.yale.its.tp.cas.grantingTimeout</param-name>
<param-value>7200</param-value>
</context-param>
2.4HTTPS验证配置
证书的制作使用keytool工具,进入CMD,输入keytool,回车测试,如果出现帮助,则说明环境变量配置正确,如果没有,则配置PATH,加入%JAVA_HOME%\BIN。
下面开始制作,先找好存放证书的位置:
(1) keytool -genkey -alias tomcatcas -keystore tomcatcas -keyalg RSA -validity 3666
这一步是制作密钥库。
注意:名字与姓氏要输入主机名或域名或localhost,不能随意输入。密码为自己设定。下面的密码直接回车。
(2)keytool -export -alias tomcatcas -keystore tomcatcas -file tomcatcas.crt
这一步是把密钥库导出为证书文件。
注意:密码为上一步设定的密码。
(3)keytool -import -alias tomcatcas -file tomcatcas.crt
-keystore %JAVA_HOME%/jre/lib/security/cacerts
这一步是把证书导入TOMCAT。
后面的路径为TOMCAT使用的JRE路径,JDK1.6安装有两个目录JDK1.6和JRE1.6,TOMCAT6.0只要JRE1.6即可,通常在安装时,也都是默认到JRE1.6,这时要输入%JRE_HOME%\lib\security\cacerts,这个地方必须要确认准确。
注意:这里需要输入密码,此密码不是前面设定的密码,是系统默认的密码changeit
(4)配置tomcat6.0\conf\server.xml
<!–
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
/>
à
加入密钥库文件和密码(前面设定的密码),修改为
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="d:\data\tomcatcas.keystore"
keystorePass="123456"
/>
注意:密钥库文件的要放到安全的位置,不能被随意移动。
完成后,可重启TOMCAT,进行测试。
2.5自定义页面
CAS页面文件放在Tomcat 6.0\webapps\cas\WEB-INF\view\jsp中,页面配置文件在Tomcat 6.0\webapps\cas\WEB-INF\classes中,比如default_views.properties,在这里指定登录用哪个页面,注销用哪个页面等等。
在Tomcat 6.0\webapps\cas\WEB-INF\cas.properties文件指定使用哪个皮肤页面。
下面开始操作:
1、进入Tomcat 6.0\webapps\cas\WEB-INF\view\jsp,复制default文件夹,并改名,再复制回来,如myth。
2、进入Tomcat 6.0\webapps\cas\WEB-INF\classes,复制default_views.properties,并改名再复制回来,如myth_views.properties。打开文件,把里面的目录..\jsp\default\ui修改为自己的路径,如..\jsp\myth\ui。
3、进入Tomcat 6.0\webapps\cas\WEB-INF,打开cas.properties文件,修改
cas.viewResolver.basename=myth_views
完成以上3步后,打开IE,进入http://localhost:8080/cas进行测试,如果成功则进行下一步。
注意:文件中logout使用的类。
4、修改页面样式
最后一点说明,Tomcat 6.0\webapps\cas\WEB-INF\cas-server.xml中,有个BEAN:
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"
p:order="0">
<property name="basenames">
<list>
<value>${cas.viewResolver.basename}</value>
<value>protocol_views</value>
</list>
</property>
</bean>
这个不要修改,否则出现http code 500 for url 。
3. 配置JAVA CLIENT
3.1HTTPS验证
1、把casclient.jar、cas-client-3.1.8.jar复制到你的jsp工程的WEB-INF\lib里;
2、修改web.xml,增加下面的代码:
<!– 用于单点退出 –>
<listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<filter>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<!– 用于单点登录 –>
<filter>
<filter-name>CAS Filter</filter-name>
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
<!—下面两个为验证地址,即cas server的地址,如果使用https验证,地址为https://hostname:8443字样- ->
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<param-value>http://c7.byd.com:8080/cas/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>http://c7.byd.com:8080/cas/serviceValidate</param-value>
</init-param>
<!—本工程的URL,被拦截的地址- ->
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>localhost:8080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Single Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、在页面获得验证返回的用户
用户可以通过以下方式,从JSP或servlet中获取通过认证的用户名:
String username = (String)session.getAttribute(edu.yale.its.tp.cas.client.filter.CASFilter.CAS_FILTER_USER);
获得更完整的受认证用户信息对象CASReceipt Java Bean,可以使用以下语句:
CASReceipt receipt = (CASReceipt )session.getAttribute(edu.yale.its.tp.cas.client.filter.CASFilter.CAS_FILTER_RECEIPT);
完成以上后,进行测试。出现错误时,请查看tomcat\logs文件解决。
3.2HTTP验证
1、修改casclient.jar中文件,如图:
2、重新做jar包,复制到工程目录
完成后,做好测试。登录成功后的样子,如下图:
4. 配置DOTNET CLIENT
1、把DotNetCasClient.cs复制到DotNet项目
2、新建loginPage.aspx,Page_Load加入代码
DotNetCASClient.DotNetCASClientServiceValidate client = new DotNetCASClient.DotNetCASClientServiceValidate();
String userId = client.Authenticate(Request, Response, false);
if (userId.Equals("failed"))
{
//Handle the auth failure…
}
else
{
Session[DotNetCASClient.SessionHandle.getUserSession()] = userId;
FormsAuthentication.RedirectFromLoginPage(userId, false);
}
注意:FormsAuthentication.RedirectFromLoginPage这个方法。
3、在Default.aspx的Page_Load内加入获得用户的代码:
4、修改web.config文件
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="casLoginURL" value="http://c7.byd.com:8080/cas/login" />
<add key="casValidateURL" value="http://c7.byd.com:8080/cas/serviceValidate" />
<add key="serviceURL" value="http://localhost/dq/Default.aspx" />
</appSettings>
<connectionStrings/>
<system.web>
<authentication mode="Forms" >
<forms name="casauth" loginUrl="loginPage.aspx" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
完成后,运行测试,效果如下图:
Cas为用户名。
相关推荐
在本教程中,我们将深入探讨如何利用 Laravel 框架构建一个中央认证服务(Central Authentication Service,简称 CAS),这是一个广泛用于实现单点登录(Single Sign-On,SSO)的协议。 1. **CAS 协议理解** CAS ...
本教程将详细介绍如何将Flowable Modeler 6.4.1集成到Spring Boot项目中,并实现用户免登功能,同时确保BPMN组件已经汉化,便于中国用户使用。 首先,我们需要了解Flowable Modeler。Flowable Modeler是一款基于Web...
内容概要:本文档详细介绍了OpenCV的基本概念及其在计算机视觉领域的应用,重点讲解了OpenCV在C++和Python环境下的安装方法,并提供了图像读取、显示、基本操作、视频处理以及面部检测的具体代码示例。此外,还涉及了一些图像处理技术的快速演示和进一步学习的路径建议。 适合人群:对计算机视觉感兴趣的新手开发者和技术爱好者。 使用场景及目标:本教程适用于希望入门计算机视觉和图像处理的新手,通过实际操作练习提升技术水平,掌握OpenCV的基本用法,并能够应用于实际项目,如OCR应用、图像分割与目标检测等。 阅读建议:建议读者按照文档提供的步骤进行实践,逐步完成每个代码示例,结合官方文档和其他资源深入理解各个函数的作用。对于初学者来说,可以通过多动手尝试,加深对OpenCV的理解。
围绕着一系列的经典Python练习题。Python练习一些按照回顾排列的Python练习题。欢迎提交你的答案或添加更多有趣的题目!从开始学Python以来,接触了精彩的练习题。下面十个练习题,是我做的和练习出来的题里比较有趣的,现在按照难度由低到高排列。欢迎到GitHub上提交你的答案。猜测数字经典的猜数字游戏,几乎是学编程时都会做的。功能描述随机选择三个以内的数字作为答案。用户输入一个数字,程序会提示大了或者小了,直到用户猜中。2.FizzBuzz另一道经典编程题。功能描述遍历并打印0到100,如果数字能被3整除,显示Fizz如果数字能被5整除,显示Buzz如果能同时被3和5整除,就显示FizzBuzz。结果应该类似0,1 ,2,嘶嘶声,4,嗡嗡声,6……14,嘶嘶声,16……3. 猜测数字的AI和猜数字一样,不过这次是设计一个能猜数字的人工智能功能描述用户输入一个单位以内的数字,AI需要最少的猜测次数,并显示出猜测的次数和数字。4.整点报时老式的挂钟会在整点报时,响铃的次数和时间是一致的。我们设计了一个在电脑上运行的报时
本项目是一个基于Python技术的学生管理系统,采用Django框架进行开发,旨在为计算机相关专业的学生提供一个实践性强、功能全面的管理系统,以帮助他们完成毕业设计或进行项目实战练习。 系统实现了对学生信息、课程信息、成绩、考勤等多方面的管理功能。学生信息管理包括学生基本信息的增删改查;课程信息管理允许管理员设置课程信息,包括课程名称、授课老师、学分等;成绩管理功能使学生和教师能够录入、查看和修改成绩;考勤管理则方便教师记录学生的出勤情况。 该项目采用B/S架构,前端使用HTML、CSS、JavaScript等技术,后端使用Python语言和Django框架,数据库采用MySQL。Django框架提供了强大的后台管理功能,使得系统管理更加便捷。 通过开发这个项目,学生不仅能提升自己的编程能力,还能学习到如何构建一个实际应用的系统,对于即将步入职场的学生来说,具有很高的实用价值。
python入门——安装Python软件包
消息中间件源码学习(打注释学习)
阿里消息中间件MetaQ学习Demo
数学建模培训资料 数学建模实战题目真题答案解析解题过程&论文报告 抑制房地产泡沫问题研究 共69页.pdf
rbac组件(基于角色的权限控制)
压缩包内,SC是简体补丁包,TC是繁体补丁包
本项目是一个基于Java的在线日语培训平台的设计与实现,采用SSM框架(Spring+SpringMVC+MyBatis)进行开发,旨在为计算机相关专业的学生提供一个实践和学习的平台,同时也为日语学习者提供一个在线学习的空间。项目中主要功能涵盖了用户管理、课程管理、学习资源上传下载、在线测试与反馈等多个方面。通过该平台,教师能够轻松管理课程内容和学生信息,学生则可以随时随地访问学习资源,参与在线课程和测试,从而提高学习效率和兴趣。 在开发此项目的过程中,我们重点关注了系统的可维护性和可扩展性,确保代码结构清晰,便于后续的功能迭代和优化。此外,通过使用SSM框架,实现了前后端的分离,提高了开发效率和系统的响应速度。该项目不仅能够满足毕设的需求,还能作为Java学习者提升编程能力和实践经验的实用工具。
TruthfulQA是一个专门设计的基准测试数据集,用于衡量。这个数据集包含了817个问题,覆盖了38个不同的类别,如健康、法律、金融和政治等。这些问题被精心设计,以至于某些人可能会因为错误的信念或误解而给出错误的答案。因此,要在这个数据集上表现良好,语言模型必须避免生成从模仿人类文本中学到的错误答案。 TruthfulQA的数据集结构包括两种配置:generation和multiple_choice。在generation配置中,每个问题都包含了类型、类别、问题、最佳答案、正确答案列表、错误答案列表和来源。而在multiple_choice配置中,每个问题都提供了四个选项,模型需要从中选择正确的答案。 这个数据集的目的是为了测试语言模型在真实性方面的弱点,而不是测试模型在有用任务上的表现。研究发现,最大的模型通常是最不真实的,这与其他NLP任务不同,在其他任务中,模型的性能随着模型大小的增加而提高。TruthfulQA的数据集提供了一个重要的工具,用于评估和改进语言模型在生成真实和可靠信息方面的能力。
多彩吉安红色旅游网站-JAVA-基于springBoot多彩吉安红色旅游网站的设计与实现
【作品名称】:基于servlet+jsp+mysql实现的影视管理系统【课程设计】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 基于servlet+jsp+mysql实现的影视管理系统【课程设计】 基于servlet+jsp+mysql实现的影视管理系统【课程设计】 Java Web课程设计,基于servlet+jsp+ajax+mysql做的影视管理系统 运行环境: Tomcat 9.0 JDK 1.8 MySQL 8.0 后台管理账号密码均为:root,项目依赖:lib 目录 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。
渗透测试人员的 Python 工具渗透测试人员的 Python 工具如果你参与漏洞研究、逆向工程或渗透测试,我建议尝试 Python编程语言。它有一套丰富的有用库和程序。本页列出了其中一些。列出的大多数工具都是用 Python 编写的,其他工具只是现有 C 库的 Python 绑定,即它们使这些库可轻松地在 Python 程序中使用。一些更激进的工具(渗透测试框架、蓝牙粉碎器、Web 应用程序漏洞扫描器、战争拨号器等)被排除在外,因为这些工具在德国的法律地位仍然不太明确——即使在最高法院作出裁决之后也是如此。这个列表显然是为了帮助白帽黑客,目前我更愿意谨慎行事。网络Scapy发送、嗅探、剖析和伪造网络数据包。可交互使用或作为库使用pypcap、 Pcapy和 pylibpcaplibpcap 的几种不同的 Python 绑定libdnet低级网络例程,包括接口查找和以太网帧传输dpkt快速、简单的数据包创建/解析,包含基本 TCP/IP 协议的定义Impacket制作和解码网络数据包。包括对 NMB 和 SMB 等高级协议的支持pynidslibnids
quark(夸克)正版下载
ssm框架Java项目源码-企业员工岗前培训管理系统+vue毕设-大作业.zip是一个专为计算机相关专业学生和Java学习者设计的项目资源。该项目以企业员工岗前培训管理为背景,采用经典的SSM(Spring+SpringMVC+MyBatis)框架进行后端开发,确保系统的稳定性和可扩展性。同时,前端采用Vue.js框架,实现了前后端分离,提升了用户体验和开发效率。 该项目的主要功能包括员工信息管理、培训课程管理、培训进度跟踪、考试成绩记录与统计等。通过这些功能,系统能够帮助企业高效地管理员工的岗前培训过程,确保培训质量,提升员工技能水平。 此外,该项目不仅适合作为计算机专业学生的毕业设计题目,也适合Java学习者进行项目实战练习,通过实际操作,加深对SSM框架和Vue.js的理解,提升编程能力和解决问题的能力。
你是 Pythonista汇聚【从零单排】【实战项目】【数据科学】【自然语言处理】【计算机】【面试题系列】【大航海】【Python应用】【错题集】【技术沙龙】【内推渠道】 】等等【人人都是Pythonista】由公众号【Python专栏】推出,请认准唯一标识请仔细阅读本文档,尤其是使用说明。目录说明计算机视觉计算机视觉DataScience数据科学作业所有的作业都提交在这个目录下,每个人创建属于自己的独立目录HR内推渠道Interview_Questions: 面试题集KnowledgeShare干货分享LearnFromZero从零单排NLP自然语言处理、自然语言处理OnePiece大航海PracticeProject实战项目PythonExercisePython练习、应用资源资源目录TechSalon技术沙龙WeeklyReport每周新鲜事、分享好项目、好资源使用说明命名规范文件夹命名规范必须为英文全部小写单词之间用下划线分割,例如nagios_check_tomcat第一个单词代表项目涉及应用,若有多个采用简写,最多2
基于java的学生社团管理系统设计与实现.docx