我正在使用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对象中的用户字符串
