我的站点转到登录页面,我想在用户登录时重定向到另一个页面。我有一个“ POST”方法,该方法将“用户名”和“密码”发送到服务器,服务器检查用户名和密码存在。
这是我的方法
@POST @Path("logIn") public void signIn(@PathParam("profileName") String profileName, @PathParam("password") String password) { if (profileService.getProfile(profileName) != null && (profileService.getPassword(profileName)).equals(password)){ //Render a new page ex "feed.jsp" } else { //send unsucessful message back to client?? }
客户端能够正确发布用户名和密码,并检查其是否存在…我只是不知道如何使它呈现(重定向到???)一个新页面
重定向,(使用Response.seeOther(URI),将任何需要的值作为查询参数传递。例如
Response.seeOther(URI)
@POST @Path("logIn") public Response login(@Context ServletContext context) { UriBuilder uriBuilder = UriBuilder.fromUri(URI.create(context.getContextPath())); uriBuilder.path(.. <path-to-your-jsp> ..); uriBuilder.queryParam("key1", "value1"); uriBuilder.queryParam("key1", "value2"); URI uri = uriBuilder.build(); return Response.seeOther(uri).build(); }
使用Jersey的JSP MVC功能,并在此处清楚地演示。例如
@POST @Path("logIn") public Viewable login() { Map<String, String> model = new HashMap<>(); model.put("key1", "value1"); model.put("key2", "value2"); return new Viewable("/feed", model); }
feed.jsp
<html> <body> <p>${it.key1}</p> <p>${it.key2}</p> </body> </html>
另外: 您是否 真的 要在URI路径中传递密码?会带来巨大的安全风险。最好在请求正文中传递它。
现在,我考虑了一下,您应该始终按照POST / REDIRECT / GET模式从登录POST 重定向。如果要在整个方法中使用JSP MVC,则可以让控制器返回Viewable登录页面的GET(在GET上),并在成功返回POST的情况下,重定向到Feed控制器,否则重定向回同一登录页面(得到)。有几种不同的解决方案。
Viewable
例如
@Path("/login") public class LoginController { @GET public Viewable loginPage() { ... return new Viewable("/login", model); // to login.jsp } @POST public Response loginPost(Form form, @Context UriInfo uriInfo) { ... UriBuilder builder = uriInfo.getBaseUriBuilder(); if (success) { builder.path("/feed"); // to FeedController GET } else { builder.path("/login"); // to LoginController GET } return Response.seeOther(builder.build()).build(); } } @Path("/feed") public class FeedController { @GET public Viewable getFeed() { ... return new Viewable("/feed", model); // to feed.jsp } }