我一直都很好奇...在使用散列密码进行散列时哪个更好:前缀或后缀?为什么?或者它是否重要,只要你加盐?
为了解释:我们所有(希望)现在我们应该知道盐之前,我们哈希它存储在数据库中的密码[ 编辑:所以你能避免类似的事情发生了什么杰夫阿特伍德最近.通常,这是通过在将盐传递给散列算法之前将盐与密码连接来完成的.但是这些例子各不相同......有些例子在密码之前加盐.一些示例在密码后添加salt .我甚至看到过一些尝试将盐放在中间的人.
那么哪种方法更好,为什么呢?有没有一种方法可以减少哈希冲突的可能性?我的谷歌搜索没有找到关于这个问题的体面分析.
编辑:很棒的答案人们!对不起,我只能选一个答案.:)
在Java中管理会话的最佳方式.我听说cookie不是可靠的选项,因为它们存储在浏览器中,以后可以访问?它是否正确?如果可能的话,请用编码示例提出答案.
哪个是最好的:
我正在JBoss AS 5中运行一个Web应用程序.我还有一个servlet过滤器,它拦截了对服务器的所有请求.现在,如果会话已过期,我想将用户重定向到登录页面.我需要执行此操作'isSessionExpired()'检查过滤器并需要相应地重定向用户.我该怎么做?我在web.xml中设置会话时间限制,如下所示:
<session-config>
<session-timeout>15</session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud) 我正在使用Mysql,我认为最好将用户个人信息及其登录名和密码分成两个不同的表,然后在两者之间引用它们.
注意:为了澄清我的帖子,我了解保护密码(哈希,盐等)的技巧.我只知道,如果我遵循生命中其他部分(投资,数据备份,甚至是个人存储)的做法,在最坏的情况下(包括表格或火灾),在表格之间分配信息可以保护您的其他数据.
目前,我正在使用JSF 2.0,Tomcat 7和MongoDB开发一个Web项目.我有一个很大的问题,如何处理数据库中用户的会话管理和身份验证/授权.
我想要的结构如下:只有登录用户才能创建事件,每个人都可以看到创建的事件.
create.xhtml - >仅适用于已登录的用户.events.xhtml - >为大家公开.我计划的基本结构是:
create.xhtml)login.xhtml@SessionScoped进入比赛)问题是:
@SessionScoped注释?在Create.java或
LoginManager.java?我有一个用于登录的过滤器.它在"用户名"和"密码"字段上执行文本检查.当且仅当文本检查正确完成时,请求才会进入Servlet.后者执行必须与数据库交互的控件.这个链条是否正确?

我正在学习Java Web,但我遇到了一些问题,需要帮助.我使用了template.jsp,其中包括header.jsp,footer.jsp,login.jsp(模板的左侧)和${param.content}.jsp.对于名为X.jsp的每个页面,我创建了另一个具有以下内容的jsp,因为我希望每个页面具有相同的布局:
<jsp:include page="template.jsp">
<jsp:param name="content" value="X"/>
<jsp:param name="title" value="Start navigate"/>`enter code here`
</jsp:include>
Run Code Online (Sandbox Code Playgroud)
例如,当我点击Review链接时,我想重定向到Review.jsp,但是我遇到了一些问题.在footer.jsp我有这样的事情:
(...)
< a href =" Review.jsp "> Review </a>
(...)
Run Code Online (Sandbox Code Playgroud)
登录后,我尝试单击Review,它将我发送到Review.jsp,但它告诉我我没有登录.我使用Spring Framework,Tomcat 7,Eclipse,MySQL.当我登录时,我创建了一个cookie:
String timestamp = new Date().toString();
String sessionId = DigestUtils.md5Hex(timestamp);
db.addSession(sessionId, username, timestamp);
Cookie sid = new Cookie("sid", sessionId);
response.addCookie(sid);
Run Code Online (Sandbox Code Playgroud)
对于每种方法,我都有类似的东西(我在教程中看到过):
@RequestMapping(value = "/writeReview", method = RequestMethod.GET)
public String nameMethod(@CookieValue("sid") String sid,...)
Run Code Online (Sandbox Code Playgroud)
使用sid,我可以找出谁是用户.我有一个包含用户帐户和其他一些表的数据库.问题是,当我点击评论或其他任何内容时,它会告诉我我没有登录.我该怎么办?
更新:
我将JavaBean用于user和login.jsp.具有登录文本框的JSP,当我单击按钮登录时,我有一个GET方法.
@RequestMapping(value = "/login", method = RequestMethod.GET)
public ModelAndView createCookie(
@RequestParam("username") String username, @RequestParam("password") String password, …Run Code Online (Sandbox Code Playgroud) 所以这就是问题所在.当用户退出我的网站时,他们仍然可以点击后退按钮并继续使用该网站.为了跟踪用户是否登录,我创建了一个会话属性"isActive".用户登录时该属性设置为true,并且在注销时会话无效之前(冗余)删除该属性.同样在每个页面上,我都会检查属性是否存在.
我还指定不应在其head标签中缓存页面.
尽管如此,用户仍然能够回击浏览器,并继续使用该网站,就好像他们从未注销过一样.
有关如何解决此问题的任何想法?
这是代码:
登录Servlet:
...
session.setAttribute("isActive", true);
//Redirect to home page.
Run Code Online (Sandbox Code Playgroud)
检查登录的JSP:
<c:if test='${empty sessionScope.isActive || sessionScope.isActive != true}'>
<c:redirect url="/index.jsp?message=Session Timed Out."/>
</c:if>
Run Code Online (Sandbox Code Playgroud)
注销Servlet:
request.getSession().removeAttribute("isActive");
request.getSession().invalidate();
response.sendRedirect("index.jsp");
Run Code Online (Sandbox Code Playgroud)
内部标记:
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="Sat, 01 Dec 2001 00:00:00 GMT">
Run Code Online (Sandbox Code Playgroud)
谢谢
我是Java EE的新手.我创建了一个登录表单和servlet来验证用户的凭据,但是当我getRemoteUser()在验证后用方法检查远程用户时,我的代码不显示用户名.
我的登录servlet是:
String uname,pass;
PreparedStatement ps=null;
uname=request.getParameter("uname");
pass=request.getParameter("pass");
ResultSet rs = null;
Connection con = null;
try {
con = prepareConnection();
String Query="select uname,email from passmanager where pass=?";
ps=con.prepareStatement(Query);
ps.setString(1,pass);
rs=ps.executeQuery();
while(rs.next())
{
if (uname.equals(rs.getString("uname")) || uname.equals(rs.getString("email")))
{
rs.close();
ps.close();
ps = null;
con.close();
con = null;
HttpSession session = request.getSession(true);
session.setAttribute("currentSessionUser",uname);
RequestDispatcher dis = request.getRequestDispatcher("/user.html");
dis.forward(request, response);
break;
}
}
}
catch(Exception e)
{
System.out.println(e);
}
Run Code Online (Sandbox Code Playgroud)
如果有任何需要更改/修改,请告诉我并帮助我.....提前感谢.