仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1789|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网站制作之在jsp中作HTTP认证的办法

[复制链接]
老尸 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:40:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
但是对于JAVA技术类的学习,我觉得大课堂反而会影响自身独立思考的过程,因为上课的时候,老师讲课的速度很快为了不遗漏要点,通常会仔细的听,js
比来研讨了jsp中作HTTP认证的成绩,它的事情体例以下:
1、server发送一个请求认证代码401和一个头信息WWW-authenticate,引发browser弹出一个认证窗口
2、server获得browser送来的认证头"Authorization",它是加密的了,要用Base64办法解密,获得明文的用户名和暗码
3、反省用户名和暗码,依据了局传送分歧的页面

以下是jsp的片段,你也能够把它做成include文件。和Base64的加解密的class源码。
若有乐趣可与我接洽:unixboy@yeah.net
<jsp:useBeanid="base64"scope="page"class="Base64"/>
<%
if(request.getHeader("Authorization")==null){
response.setStatus(401);
response.setHeader("WWW-authenticate","Basicrealm="unixboy.com"");
}else{
Stringencoded=(request.getHeader("Authorization"));
Stringtmp=encoded.substring(6);
Stringup=Base64.decode(tmp);
Stringuser="";
Stringpassword="";
if(up!=null){
user=up.substring(0,up.indexOf(":"));
password=up.substring(up.indexOf(":")+1);
}
if(user.equals("unixboy")&&password.equals("123456")){
//认证乐成
}else{
//认证失利
}
}
%>

//动静加解密class
publicclassBase64
{
/**decodeaBase64encodedString.
*<p><h4>Stringtobyteconversion</h4>
*ThismethodusesanaiveStringtobyteinterpretation,itsimplygetseach
*charoftheStringandcallsitabyte.</p>
*<p>SinceweshouldbedealingwithBase64encodedStringsthatisareasonable
*assumption.</p>
*<p><h4>Endofdata</h4>
*Wedonttrytostoptheconverionwhenwefindthe"="endofdatapaddingchar.
*Wesimplyaddzerobytestotheunencodebuffer.</p>
*/
publicstaticStringdecode(Stringencoded)
{
StringBuffersb=newStringBuffer();
intmaxturns;
//workouthowlongtoloopfor.
if(encoded.length()%3==0)
maxturns=encoded.length();
else
maxturns=encoded.length()+(3-(encoded.length()%3));
//tellsuswhethertoincludethecharintheunencode
booleanskip;
//theunencodebuffer
byte[]unenc=newbyte[4];
byteb;
for(inti=0,j=0;i<maxturns;i++)
{
skip=false;
//getthebytetoconvertor0
if(i<encoded.length())
b=(byte)encoded.charAt(i);
else
b=0;
//testandconvertfirstcapitalletters,lowercase,digitsthen+and/
if(b>=65&&b<91)
unenc[j]=(byte)(b-65);
elseif(b>=97&&b<123)
unenc[j]=(byte)(b-71);
elseif(b>=48&&b<58)
unenc[j]=(byte)(b+4);
elseif(b==+)
unenc[j]=62;
elseif(b==/)
unenc[j]=63;
//ifwefind"="thendatahasfinished,werenotreallydealingwiththisnow
elseif(b===)
unenc[j]=0;
else
{
charc=(char)b;
if(c==
||c==||c==||c==        )
skip=true;
else
//couldthrowanexceptionhere?itsinputwedontunderstand.
;
}
//oncethearrayhasboiledconvertthebytesbackintochars
if(!skip&&++j==4)
{
//shiftthe6bitbytesintoasingle4octetword
intres=(unenc[0]<<18)+(unenc[1]<<12)+(unenc[2]<<6)+unenc[3];
bytec;
intk=16;
//shifteachoctetdowntoreaditascharandaddtoStringBuffer
while(k>=0)
{
c=(byte)(res>>k);
if(c>0)
sb.append((char)c);
k-=8;
}
//resetjandtheunencodebuffer
j=0;
unenc[0]=0;unenc[1]=0;unenc[2]=0;unenc[3]=0;
}
}
returnsb.toString();
}

/**encodeplaintextdatatoabase64string
*@paramplainthetexttoconvert.Ifplainislongerthan76charactersthismethod
*returnsnull(seeRFC2045).
*@returntheencodedtext(ornullifstringwaslongerthan76chars).
*/
publicstaticStringencode(Stringplain)
{
if(plain.length()>76)
returnnull;
intmaxturns;
StringBuffersb=newStringBuffer();
//theencodebuffer
byte[]enc=newbyte[3];
booleanend=false;
for(inti=0,j=0;!end;i++)
{
char_ch=plain.charAt(i);
if(i==plain.length()-1)
end=true;
enc[j++]=(byte)plain.charAt(i);
if(j==3||end)
{
intres;
//thisisabitinefficientattheendpoint
//worthitforthesmalldecreaseincodesize?
res=(enc[0]<<16)+(enc[1]<<8)+enc[2];
intb;
intlowestbit=18-(j*6);
for(inttoshift=18;toshift>=lowestbit;toshift-=6)
{
b=res>>>toshift;
b&=63;
if(b>=0&&b<26)
sb.append((char)(b+65));
if(b>=26&&b<52)
sb.append((char)(b+71));
if(b>=52&&b<62)
sb.append((char)(b-4));
if(b==62)
sb.append(+);
if(b==63)
sb.append(/);
if(sb.length()%76==0)
sb.append(
);
}
//nowsettheendcharstobepadcharacterifthere
//waslessthanintegralinput(ie:lessthan24bits)
if(end)
{
if(j==1)
sb.append("==");
if(j==2)
sb.append(=);
}
enc[0]=0;enc[1]=0;enc[2]=0;
j=0;
}
}
returnsb.toString();
}
}



JAVA学习必须明确这是一项投资,对于大多数的人来说,学习JAVA是为了就业,还有就是刚走向工作位置的朋友想尽快赶上工作的节奏。
柔情似水 该用户已被删除
沙发
发表于 2015-1-22 18:42:58 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
小妖女 该用户已被删除
板凳
发表于 2015-1-28 11:40:25 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
谁可相欹 该用户已被删除
地板
发表于 2015-2-5 14:33:00 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
变相怪杰 该用户已被删除
5#
发表于 2015-2-12 04:07:42 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
再现理想 该用户已被删除
6#
发表于 2015-2-19 20:58:43 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
金色的骷髅 该用户已被删除
7#
发表于 2015-2-23 10:12:44 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
莫相离 该用户已被删除
8#
发表于 2015-3-7 07:28:01 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
兰色精灵 该用户已被删除
9#
发表于 2015-3-14 14:20:31 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
小魔女 该用户已被删除
10#
发表于 2015-3-14 17:06:56 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
只想知道 该用户已被删除
11#
发表于 2015-3-17 17:22:56 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
海妖 该用户已被删除
12#
发表于 2015-3-17 21:10:33 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
因胸联盟 该用户已被删除
13#
发表于 2015-3-24 18:48:23 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
深爱那片海 该用户已被删除
14#
发表于 2015-4-24 15:04:48 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
冷月葬花魂 该用户已被删除
15#
发表于 2015-4-26 04:27:18 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
愤怒的大鸟 该用户已被删除
16#
发表于 2015-5-2 18:38:59 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
活着的死人 该用户已被删除
17#
发表于 2015-6-8 19:58:04 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
老尸 该用户已被删除
18#
 楼主| 发表于 2015-6-12 09:09:16 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
爱飞 该用户已被删除
19#
发表于 2015-7-9 07:54:36 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
飘灵儿 该用户已被删除
20#
发表于 2015-7-11 04:31:30 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-29 07:59

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表