- Я не могу просмотреть сообщения ActionMessages и ActionErrors, установленные пользователем LoginAction
- Если я войду в систему и снова перейду по URL-адресу: /login, меня не перенаправит на страницу успеха.
- Теперь я могу успешно перенаправить, если сеанс уже существует. Мне пришлось внести 2 изменения, которые я понял:
- Во-первых, в моем классе действий я устанавливал переменные сеанса в void setSession(Карта карты), что было неправильно (это должна быть только функция установки).
- Во-вторых, я проверил, существует ли переменная сеанса в моем validate() метод, который решил проблему.
- Но я по-прежнему не могу просмотреть свои ActonErrors и ActionMessages.
- Нужно ли использовать . Потому что это мешает моему CSS, и я не могу найти решения, чтобы это исправить. Могу ли я назначить атрибут ID в ?
...
username
password
I've forgotten my password.
...
Вот мой struts.xml:
/login
/JSP/sreebhog_login.jsp
/JSP/index.jsp
/JSP/sreebhog_login.jsp
Вот мое действие при входе:
package com.sreebhog.actions;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
import com.sreebhog.dao.EmployeeDAO;
import com.sreebhog.interfaces.LoginRequired;
import com.sreebhog.model.dto.Employee;
import com.sreebhog.utility.Cryptography;
public class LoginAction extends ActionSupport implements SessionAware,LoginRequired {
private String loginUserName;
private String loginPassword;
SessionMap sessionMap;
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public void setSession(Map map) {
sessionMap=(SessionMap) map;
sessionMap.put("username", loginUserName);
}
public String execute()
{
String userName = null;
if (sessionMap.containsKey("username"))
{
userName = (String) sessionMap.get("username");
if (userName != null )
{
if (!userName.equals(""))
{
return SUCCESS;
}
}
}
EmployeeDAO employeeDao = new EmployeeDAO();
Employee employee = employeeDao.find(this.getLoginUserName());
if (employee == null || employee.getUserName().equals(""))
{
System.out.println("Here1");
addActionError("Username or password is invalid");
return INPUT;
} else
try {
if (employee.getPassword().equals(Cryptography.getHash("SHA-1", this.getLoginPassword(), employee.getSalt())))
{
System.out.println("Here2");
addActionError("Username or password is invalid");
return INPUT;
}
else {
System.out.println("Here3");
sessionMap.put("username",(String)loginUserName);
sessionMap.put("role",(String)employee.getPermissions().getRole());
return SUCCESS;
}
} catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
e.printStackTrace();
}
return INPUT;
}
public void validate()
{
if (loginUserName == null || loginUserName.equals("") || loginPassword == null || loginPassword.equals(""))
{
addActionError("Please fill in username and password");
}
}
public String logout()
{
sessionMap.invalidate();
return INPUT;
}
public String getLoginUserName() {
return loginUserName;
}
public void setLoginUserName(String loginUserName) {
this.loginUserName = loginUserName;
}
public String getLoginPassword() {
return loginPassword;
}
public void setLoginPassword(String loginpassword) {
this.loginPassword = loginpassword;
}
}
Вот мой LoginInterceptor:
package com.sreebhog.interceptors;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.sreebhog.actions.LoginAction;
import com.sreebhog.interfaces.LoginRequired;
public class LoginInterceptor extends AbstractInterceptor {
@Override
public String intercept(final ActionInvocation invocation) throws Exception {
Map session = ActionContext.getContext().getSession();
String userName = (String) session.get("username");
if (userName != null && !userName.equals("")) {
return invocation.invoke();
}
Object action = invocation.getAction();
if (!(action instanceof LoginRequired)) {
return invocation.invoke();
}
if (!(action instanceof LoginAction)) {
return "loginRedirect";
}
return invocation.invoke();
}
}
Подробнее здесь: https://stackoverflow.com/questions/151 ... -in-struts