仓酷云

标题: JAVA网站制作之在jsp中作HTTP认证的办法 [打印本页]

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




欢迎光临 仓酷云 (http://www.ckuyun.com/) Powered by Discuz! X3.2