如何对用户进行身份验证并将其重定向到他自己的页面,即到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") } }
创建个人资料
@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); }
您userdata [Map]对我的用法看起来不对。它是用户类的一部分,是非静态还是静态的?如果它是非静态的,那么每次您将执行new User()该映射时,该映射将被初始化,并且其中将没有数据。因此u1.userdata.containsKey(emailc);将永远是错误的。
userdata [Map]
new User()
u1.userdata.containsKey(emailc);
如果您出于开发目的将哈希图用作临时数据库,则使其为静态,而不是将其保留在其他类(如UserStore或某些数据库访问层)中。示例如下:
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")
如果您想要的是,仅在url中添加email参数:
servletResponse.sendRedirect("http://localhost:8080/MySite/"+emailc);
更新:
看到的根本是,您获得了请求参数[email , password]。您检查它是否存在于地图中。现在您在这里做错了,您需要像这样创建一个新用户User u = new User();,然后从中获取电子邮件和密码emailc = u.getEmail();。这emailc将永远如此null,您userdata map将永远false为此而归。您有两种选择:
[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方法而非==完成。
==
equals
String matching
equalsIgnoreCase