如何验证用户并将其重定向到他自己的页面,即www.mysite.com/"user的电子邮件“。
我正在使用以下不能正常工作的算法......
用户类中的userDB:
Map<String,String> userdata=new HashMap<String,String>();
首先是我的登录流程表单:
@Path("/login")
@POST
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void login(
@FormParam("email") String emailc,
@FormParam("password") String pass,
@Context HttpServletResponse servletResponse
) throws IOException,RuntimeException {
User u1=new User();
pass=u1.getPassword();
emailc=u1.getEmailaddrs();
boolean checked=false;
boolean exists;
exists=u1.userdata.containsKey(emailc);
if(exists){
String mypass =u1.userdata.get(emailc);
if(mypass==pass){
checked=true;
}else{
checked=false;
}
}else{
checked=false;
}
if(!checked){
//User Doesn't exists
servletResponse.sendRedirect("http://localhost:8080/MySite/pages/Create_Profile.html");
}else{
servletResponse.sendRedirect("http://localhost:8080/MySite/{email}"); <<<< How to redirect using @FormParam("email")
}
}
createprofile
@POST
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void newUser(
@FormParam("email") String email,
@FormParam("password") String password,
@Context HttpServletResponse servletResponse
) throws IOException {
User u = new User(email,password);
User.userdata.put(email,password);
}
答案 0 :(得分:2)
您对userdata [Map]
的使用对我来说是错误的。它是用户类的一部分,是非静态还是静态?
如果它是非静态的,则每次执行new User()
时,该地图将被初始化,并且其中没有数据。因此u1.userdata.containsKey(emailc);
将始终为假。
如果您正在将hashmap用作开发目的的临时数据库,那么请将其设置为静态,而不是将其保存在其他类(如UserStore或某些DB访问层)中。例如:
public class UserDAO(){
private static Map<String,User> userdata = new HashMap<String,User>();
public boolean hasUser(String email){
return userdata.contains(email);
}
public User saveUser(String email, String password ...){
//make user object save it in map and return the same
}
// more methods for delete and edit etc.
}
并在你的REST层类中使用它
exists = userDao.hasUser(email);
优点:
关于使用电子邮件转发
servletResponse.sendRedirect("http://localhost:8080/MySite/{email}"); <<<< How to redirect using @FormParam("email")
仅在网址中添加电子邮件参数,如果这就是您想要的内容:
servletResponse.sendRedirect("http://localhost:8080/MySite/"+emailc);
更新:
看到根本的是你得到了请求参数[email , password]
。你检查它是否存在于地图中。现在你在这里做错了的是你创建了一个像User u = new User();
这样的新用户,然后从中获取电子邮件和密码emailc = u.getEmail();
。此emailc
始终为null
,您的userdata map
将始终返回false
。你有两个选择:
编程时遵循的一个好习惯是始终将方法参数视为最终参数。
更新2:
if(mypass==pass){
checked=true;
}else{
checked=false;
}
将==
更改为equals
方法。 String matching
应该由equals
或equalsIgnoreCase
方法而不是==来完成。
答案 1 :(得分:0)
您始终创建一个没有任何参数的新User
:User u1=new User();
。所有这些User
个实例都具有相同的属性值,exists
可能始终为false
。