jsp:
简单的一个登陆页面。
<%--
Created by IntelliJ IDEA.
User: bin
Date: 2020-07-02
Time: 13:23
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="login.action" method="post">
账号:<input name="user.name" type="text"><br>
密码:<input name="user.password" type="text"><br>
<input type="submit" value="注册">
</form>
</body>
</html>
登陆成功后才能访问的页面。就是测试能不能访问的。
<html>
<body>
<h2>shout!</h2>
</body>
</html>
登陆成功的页面,一样时测试的。
<%@page isELIgnored="false" pageEncoding="UTF-8" %>
<html>
<body>
<h2>bins
!</h2>
欢迎回来${user.name}
</body>
</html>
action:
登陆的逻辑方法,简单的判断
package com.bin.action;
import com.bin.entity.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;
import java.util.Map;
public class LoginAction extends ActionSupport {
public User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String login(){
System.out.println("进来了");
if ("bin".equals(user.getName())&&"bin".equals(user.getPassword())){
System.out.println("登陆成功");
Map<String, Object> sessionMap = ActionContext.getContext().getSession();
sessionMap.put("user",user);
return SUCCESS;
}else {
return ERROR;
}
}
public String registr(){
return SUCCESS;
}
public String sss(){
return SUCCESS;
}
}
Interceptor:
自定义的拦截器
package com.bin.interceptor;
import com.bin.entity.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.interceptor.Interceptor;
import java.util.Map;
public class myInterceptor implements Interceptor {
@Override
public void destroy() {
}
@Override
public void init() {
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
//得到当前拦截的的目标Action代理对象(那个action请求来访问就获取这个action的代理对象。就好像给这个对象起个别名)
ActionProxy proxy = invocation.getProxy();
得到当前执行的action的方法,action请求中的执行方法。
String proxyMethod = proxy.getMethod();
//简单的判断,这个是不拦截的方法,类似于登陆,注册之类的
if ("login".equals(proxyMethod)||"registr".equals(proxyMethod)){
//这就话就是放行
invocation.invoke();
}
//获取session域中的数据
Map<String, Object> sessionMap = ActionContext.getContext().getSession();
User user = (User) sessionMap.get("user");
if (user==null){
//判断是否存在,不存在就跳转回登陆页面
return "login";
}else {
//方形
return invocation.invoke();
}
}
}
user:
别忘了创建实体类了
package com.bin.entity;
public class User {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "user{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
struts.xml:
最重点的来的,xml的配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!--自己定义的默认包,继承struts2中默认额拦截器包中的18个拦截器,同时还使用了自己定义的拦截器 -->
<package name="myDefault" extends="struts-default" abstract="true">
<!--定义拦截器 -->
<interceptors>
<!--自己定义的拦截器,在这里配置到xml文件中-->
<interceptor name="myInterceptor" class="com.bin.interceptor.myInterceptor"></interceptor>
<!--拦截器栈,定义自己的拦截器栈,里面注入的是struts2默认的拦截器和我们自己写的拦截器-->
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="myInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!--这是在全局使用的我们的拦截器栈-->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
</package>
<package name="default" extends="myDefault" namespace="/">
<!--定义的全局变量,只要是返回值为login的,都走这个result-->
<global-results>
<result name="login">/logini.jsp</result>
</global-results>
<!--登陆action的配置-->
<action name="login" class="com.bin.action.LoginAction" method="login">
<result name="success">/WEB-INF/jsp/bins.jsp</result>
<result name="error">/index.jsp</result>
</action>
<!--这个是登陆之后才能访问的-->
<action name="bin" class="com.bin.action.LoginAction" method="sss">
<result name="success">/WEB-INF/jsp/shout.jsp</result>
</action>
<!-- 需要权限才能访问的页面-->
<action name="*">
<result>/WEB-INF/jsp/*.jsp</result>
</action>
</package>
</struts>