今天在用acegi做系统验证的时候碰到几个问题:
配置好acegi+struts2+spring+hibernate后。
1、登录acegi验证失败
在struts2中,用标签书写登录页面,如下所示:
<s:form action="/loginCheck.htm" method="post" enctype="multipart/form-data">
<s:textfield name="j_username" label="%{getText('loginName')}"></s:textfield>
<s:password name="j_password" id="j_password" label="%{getText('password')}"></s:password>
<s:submit value="%{getText('OK')}"></s:submit>
</s:form>
结果,导致验证总是通不过,每次登录都被转回登录页面。
开始的时候,怀疑acegi配置错误,反复检查,研究,没有发现问题所在。
最后在验证的时候,也就是从数据库取出登录信息,装配到UserDetails的时候,把密码置为空(已经处于疯狂状态下的做法)。
结果奇迹般的验证通过了!
难道从登录表单传来的中国化工物流网密码是空的?
为啥呢?
对比以前的项目。发现在form标签中多了enctype的属性设置(此处是照抄struts2标签示例,当时不明白该标签的意思,也在w2school查到是如下意思:
值描述application/x-www-form-urlencoded在发送前编码所有字符(默认)multipart/form-data
不对字符编码。
在使用包含文件上传控件的表单时,必须使用该值。
text/plain空格转换为 "+" 加号,但不对特殊字符编码。
,觉得没啥问题,也就把该标签加上去了。)
去掉该标签后,成功验证登录。
2、成功登录后,自动跳转到favicon.ico文件
这是个老问题,之前一直就存在,没有从根本上解决。只是在根目录下放了一个favicon.ico以避免出现404的错误。但是在google浏览器下,他老是会弹出一个下载框,下载favicon.ico。
在一个偶然的情况,发现有人说是用了acegi的问题,然后在baidu上查找:acegi favicon.ico
无果。
转战google,在第一页就找到了需要的答案,不过是全英文的。
他的意思就是说,在你的权限第一的地方(acegi配置文件重),加上如下一行就可以:
/favicon.ico=PRIV_ANONYMOUS
这一行的意思就是说,允许任何人访问favicon.ico文件,不管是否通过了登录验证。
3、登录成功后跳转的问题
比如,我在acegi配置文件中配置了,如果没有登录,则可以范文a.htm,b.htm,login.html,index.html,favicon.ico。
当我登录的时候,我在地址栏输入地址+不存在的网页地址,比如:http://localhost/fsjhfihfi.html。则他回自动跳转到login.html要求你登录。
但是在登录成功后,会继续跳转到fsjhfihfi.html,而该页面是不存在的。会报404错误,也无法后退。后退就退出去了。。。。
解决方法是,在登录页面,也就是login.html加上清空session的命令。
OK。
转载于:https://www.cnblogs.com/eggbucket/archive/2012/10/25/2739952.html