下面是“Struts2拦截器登录验证实例”的完整攻略。
1. 确认需求
首先,我们需要明确需求,即需要在 Struts2 项目中添加登录验证功能。具体来说就是,用户在访问某些敏感页面时,必须先登录才能查看。
2. 创建登录页面和验证页面
第二步,我们需要创建登录页面和验证页面。在登录页面中,需要输入用户名和密码,然后提交表单。在验证页面中,需要根据提交的用户名和密码进行验证。
下面是示例代码:
<!-- login.jsp -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h1>Login Page</h1>
<form action="/login" method="post">
<label>Username: </label>
<input type="text" name="username">
<br>
<label>Password: </label>
<input type="password" name="password">
<br>
<input type="submit" value="Login">
</form>
</body>
</html>
// LoginAction.java
public class LoginAction extends ActionSupport {
private String username;
private String password;
// 响应登录请求
public String login() {
// 进行用户名和密码的验证
if ("admin".equals(username) && "123456".equals(password)) {
// 如果验证通过,将用户信息保存到会话中
Map<String, Object> session = ActionContext.getContext().getSession();
session.put("username", username);
return SUCCESS;
} else {
addActionError("Invalid username or password");
return ERROR;
}
}
// 响应注销请求
public String logout() {
Map<String, Object> session = ActionContext.getContext().getSession();
session.clear();
return SUCCESS;
}
// getter 和 setter
// ...
}
3. 编写拦截器
第三步,我们需要编写一个拦截器,在用户访问敏感页面之前,先检查是否已经登录。
下面是示例代码:
public class LoginInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext context = invocation.getInvocationContext();
Map<String, Object> session = context.getSession();
String username = (String) session.get("username");
// 如果用户已经登录,就放行
if (username != null) {
return invocation.invoke();
}
// 如果用户没有登录,就跳转到登录页面
String loginUrl = context.getContextPath() + "/login.jsp";
HttpServletResponse response = (HttpServletResponse) context.get(StrutsStatics.HTTP_RESPONSE);
response.sendRedirect(loginUrl);
return null;
}
}
4. 配置拦截器
第四步,我们需要在 Struts2 项目的配置文件中配置拦截器和拦截器栈。
下面是示例代码:
<!-- struts.xml -->
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" extends="struts-default">
<interceptors>
<!-- 配置 LoginInterceptor 拦截器 -->
<interceptor name="loginInterceptor"
class="com.example.LoginInterceptor" />
<!-- 配置拦截器栈 -->
<interceptor-stack name="loginStack">
<interceptor-ref name="loginInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="loginStack" />
<global-results>
<result name="login" type="redirect">/login.jsp</result>
</global-results>
<!-- 配置需要进行登录验证的页面 -->
<action name="securePage" class="com.example.SecureAction">
<result>/secure.jsp</result>
</action>
</package>
</struts>
5. 测试
最后一步,我们需要测试我们的登录验证功能,确保它能正常工作。通过访问需要进行登录验证的页面,我们可以看到用户被重定向到登录页面,要求用户先进行登录。如果用户输入了正确的用户名和密码,那么就可以顺利访问需要进行登录验证的页面了。
另外,如果需要对某个 Action 进行特殊的拦截处理,可以在该 Action 中配置。
下面是一个 Action 代码示例:
@InterceptorRefs({
@InterceptorRef("loginInterceptor")
})
public class SecureAction extends ActionSupport {
@Override
public String execute() {
return SUCCESS;
}
}
在该 Action 中,使用了 @InterceptorRefs 注解来指定使用 LoginInterceptor 拦截器进行登录验证。其它与普通 Action 相同。
至此,“Struts2拦截器登录验证实例”的完整攻略就介绍完了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2拦截器登录验证实例 - Python技术站