gpt4 book ai didi

java - 如何在 servlet 中为 post 请求放置/login/{param}/等参数

转载 作者:行者123 更新时间:2023-11-30 10:25:07 26 4
gpt4 key购买 nike

我有一个登录 servlet,在成功登录后,我希望用户可以

/login/{username}/

如何将 username 放入 POST 请求的 URL 中?

我已经查找了某些答案,例如 thisthis但无法理解如何真正实现我的目标。我想坚持使用 servlet,避免使用 JAX-RS 等技术。

这是我的登录逻辑实现:

   private void login_doIT(HttpServletRequest request, HttpServletResponse response) throws SQLException, InvalidKeySpecException, NoSuchAlgorithmException, ServletException, IOException {
String userInput = request.getParameter("user_name");
String pass = request.getParameter("pass");
pst = c.prepareStatement(query);
pst.setString(1,userInput);
rs = pst.executeQuery();
while (rs.next()){
imiya = rs.getString("user_name");
kyuch = rs.getString("key");
kodom = rs.getBytes("nitrate");
}
EncryptClass instance = new EncryptClass(2048,100000);
if(instance.chkPass(pass,kyuch,kodom) && imiya.equals(userInput)){
HttpSession session = request.getSession();
session.setAttribute("userLogged",userInput);
request.setAttribute("title",userInput);
String pathInfo = request.getPathInfo();
if(pathInfo!=null || !pathInfo.isEmpty()){
String[] pathArr = pathInfo.split("/");
String val = pathArr[1];//{username}
//now what??.....
}
request.getRequestDispatcher("/LoginLanding.jsp").forward(request,response);
} else {
request.setAttribute("message", message);
request.getRequestDispatcher("/index.jsp").include(request,response);
}
}

这是它的 web.xml:

<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>AuthPack.ServletLogin</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/Login/*</url-pattern>
</servlet-mapping>

提交表单后,URL 变成类似

/login

但我想要这样:

/login/{username}

更优选:

/{username}

最佳答案

您必须使用 url 重写器或过滤器。

下面是一个使用过滤方法的例子:

在您的登录 servlet 而不是转到 loginLanding.jsp你像这样重定向到过滤器:

//REDIRECT TO filter 
response.sendRedirect("/user/"+userInput);

要创建过滤器,它与创建 servlet 非常相似,您可以选择创建这样的映射 (web.xml):

  <filter>
<display-name>UserFilter</display-name>
<filter-name>UserFilter</filter-name>
<filter-class>filters.UserFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UserFilter</filter-name>
<url-pattern>/user/*</url-pattern>
</filter-mapping>

您的过滤器应该看起来像这样:

public class UserFilter implements Filter {

public UserFilter() {
}

public void destroy() {
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
String requri = ((HttpServletRequest) request).getRequestURI().substring(((HttpServletRequest) request).getContextPath().length() + 1);
HttpSession session = (((HttpServletRequest) request).getSession());

String RequestedUsername = null;

if(requri.contains("user/")){
//get the username after "user/"
RequestedUsername=requri.substring(5);
if(!RequestedUsername.isEmpty()){
//if not empty set session
session.setAttribute("loggedInUser",RequestedUsername);
}
}

//forward to servlet which will set user details etc... (just get the user session variable from there) in that servlet you forward to landinglogin.jsp
request.getRequestDispatcher("/profile").forward(request, response);


}

关于java - 如何在 servlet 中为 post 请求放置/login/{param}/等参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46368064/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com