老尸 发表于 2015-1-18 11:40:04

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;
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=(byte)(b-65);
elseif(b>=97&&b<123)
unenc=(byte)(b-71);
elseif(b>=48&&b<58)
unenc=(byte)(b+4);
elseif(b==+)
unenc=62;
elseif(b==/)
unenc=63;
//ifwefind"="thendatahasfinished,werenotreallydealingwiththisnow
elseif(b===)
unenc=0;
else
{
charc=(char)b;
if(c==
||c==||c==||c==        )
skip=true;
else
//couldthrowanexceptionhere?itsinputwedontunderstand.
;
}
//oncethearrayhasboiledconvertthebytesbackintochars
if(!skip&&++j==4)
{
//shiftthe6bitbytesintoasingle4octetword
intres=(unenc<<18)+(unenc<<12)+(unenc<<6)+unenc;
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;unenc=0;unenc=0;unenc=0;
}
}
returnsb.toString();
}

/**encodeplaintextdatatoabase64string
*@paramplainthetexttoconvert.Ifplainislongerthan76charactersthismethod
*returnsnull(seeRFC2045).
*@returntheencodedtext(ornullifstringwaslongerthan76chars).
*/
publicstaticStringencode(Stringplain)
{
if(plain.length()>76)
returnnull;
intmaxturns;
StringBuffersb=newStringBuffer();
//theencodebuffer
byte[]enc=newbyte;
booleanend=false;
for(inti=0,j=0;!end;i++)
{
char_ch=plain.charAt(i);
if(i==plain.length()-1)
end=true;
enc=(byte)plain.charAt(i);
if(j==3||end)
{
intres;
//thisisabitinefficientattheendpoint
//worthitforthesmalldecreaseincodesize?
res=(enc<<16)+(enc<<8)+enc;
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;enc=0;enc=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等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。

变相怪杰 发表于 2015-2-12 04:07:42

如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。

再现理想 发表于 2015-2-19 20:58:43

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

金色的骷髅 发表于 2015-2-23 10:12:44

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

莫相离 发表于 2015-3-7 07:28:01

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

兰色精灵 发表于 2015-3-14 14:20:31

科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

小魔女 发表于 2015-3-14 17:06:56

是一种将安全性(Security)列为第一优先考虑的语言

只想知道 发表于 2015-3-17 17:22:56

是一种将安全性(Security)列为第一优先考虑的语言

海妖 发表于 2015-3-17 21:10:33

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

因胸联盟 发表于 2015-3-24 18:48:23

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

深爱那片海 发表于 2015-4-24 15:04:48

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

冷月葬花魂 发表于 2015-4-26 04:27:18

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

愤怒的大鸟 发表于 2015-5-2 18:38:59

Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台

活着的死人 发表于 2015-6-8 19:58:04

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

老尸 发表于 2015-6-12 09:09:16

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

爱飞 发表于 2015-7-9 07:54:36

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

飘灵儿 发表于 2015-7-11 04:31:30

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
页: [1]
查看完整版本: JAVA网站制作之在jsp中作HTTP认证的办法