当前位置 : 主页 > 编程语言 > java >

jsp – 在tomcat中为我的所有struts2应用程序单点登录

来源:互联网 收集:自由互联 发布时间:2021-06-25
我正在使用struts2创建多个应用程序并将其部署在tomcat7中.所有应用程序的用户都是相同的.所以,我决定只对它们进行一次身份验证.为此我使用cookies. 不确定这是否是最简单和最好的方式
我正在使用struts2创建多个应用程序并将其部署在tomcat7中.所有应用程序的用户都是相同的.所以,我决定只对它们进行一次身份验证.为此我使用cookies.

不确定这是否是最简单和最好的方式.但仍在努力.

但是,我无法为单个应用程序本身实现它.

Login.jsp页面

<s:form action="login">
<table>
<tr><s:textfield name="username" placeholder="Username"></s:textfield></tr>
<tr><s:password name="userpass" placeholder="Password"></s:password></tr>
<tr>
<td colspan="2" align="center"><input type="submit" class="button" value="Submit" /></td>
</tr></table> 
</s:form>

登录()和退出()

@SuppressWarnings({ "unchecked", "rawtypes" })
public String login() {
    int count = 0;
    try {
        Connection con = getConnection();
        PreparedStatement ps = con
                .prepareStatement("select COUNT(*) AS rowcount from users where username=? and password=? and its='1'");
        ps.setString(1, username);
        ps.setString(2, userpass);
        ResultSet rs = ps.executeQuery();
        rs.next();
        count = rs.getInt("rowcount");
        rs.close();
    } catch (Exception e) {
        System.out.println("Unable to login - " + e.getMessage());
    }
    if (count == 1) {
        Map session = ActionContext.getContext().getSession();
        session.put("login", "true");
        session.put("user", username);

        // Save to cookie
          Cookie user = new Cookie("user", username);
          user.setPath("/");
          servletResponse.addCookie(user);

        return "success";
    } else {
        setError("Invalid login. Try again.");
        return "error";
    }
}

@SuppressWarnings("rawtypes")
public String logout() {
    Map session = ActionContext.getContext().getSession();
    session.remove("login");
    session.remove("user");
    Cookie user = new Cookie("user", "");
      user.setPath("/");
      servletResponse.addCookie(user);
    return "success";
}

LoginCheck.jsp

<%
String user = null;
for(Cookie c : request.getCookies()) {
    if (c.getName().equals("user")){
        user = c.getValue();
        }
    }
if(user == null){
    out.println("user : "+user);
    session.setAttribute("login", "false");
    response.sendRedirect("login.jsp");
    }
else{
    out.println("user : "+user);
    session.setAttribute("login", "true");
    session.setAttribute("user", user);
    }
%>

此代码正确登录并设置了cookie,但即使用户未登录,也会显示主页而不是登录页面.

解决上述问题需要做的事情很少

>注销时设置cookie.setMaxAge(0).这将删除cookie注销.>对cookie对象进行空检查.如果它存在,则用户是登录后,其他应用程序可以使用该cookie登录直接使用cookie对象中的用户字符串

网友评论