0

好的,所以我已经制作了基本的其余示例,现在我想通过在我的示例中使用身份验证(用户登录)更进一步。

我只对我的数据使用 Java 集合。没有数据库!

我将用户数据存储在地图中,其中电子邮件是他密码的关键!

但是我陷入了基本身份验证部分,其中一个表单请求被发布到我的 rest -post 方法,它从用户那里获取值......像这样:

@POST
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED,
        public void newUser(
        @FormParam("email") String email,
        @FormParam("password") String password,@ContextHttpServletResponse servletResponse
) throws IOException {

    // Form Processing algo
if(emailexists){
servletResponse.sendRedirect("http://localhost:8080/xxx/LoginFailed.html");
  }
else{
    servletResponse.sendRedirect("http://localhost:8080/xxx/UserHomPage.html");
  }    
}

不知道我在做什么错.. 也只能使用 Java 集合(如 Lists、Map.etc)。

我是否在这里使用了正确的技术,或者任何人都有更好的技术。

任何帮助,将不胜感激 !

我在 Windows 上使用 apache tomcat 6 ..

在这件事上完全是菜鸟!

4

1 回答 1

0

要在没有数据库的情况下保存持久数据(如用户名和密码),您应该考虑将数据保存在服务器端的文本文件中,并将数据读回构造函数中的映射中。

但是,您拥有的数据越多,此过程的成本就越高。如果您有大量用户,您真的应该考虑使用数据库,因为它们更有条理、更高效且更易于使用。

    @Path("myPath")
    public class MyResource {

        private static final String FILE_PATH="my/path/to/userdata.txt";

        private HashMap<String, String> _userData;

        public MyResource() {
            try {
                Scanner scanner = new Scanner(new File(FILE_PATH));
                _userData = new HashMap<String, String>();
                while(scanner.hasNext()) {
                    String[] line = scanner.nextLine().split(",");
                    _userData.put(line[0].trim(), line[1].trim());
                }
            } catch(IOException e) {
                e.printStackTrace();
            }
        }

        @POST
        @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
        public Response addNewUser(@FormParam("email") String email,
                                   @FormParam("password") String password)
                                   throws IOException {

            PrintWriter writer = new PrintWriter(new File(FILE_PATH));
            int statusCode = 200;
            // If that email already exists, don't print to file
            if(_userData.containsKey(email))
                statusCode = 400;
            else
                writer.println(email + "," + password);
            writer.close();
            return Response.status(statusCode);
        }
    }
于 2013-06-21T08:03:44.617 回答