码迷,mamicode.com
首页 > 其他好文 > 详细

struts2学习(6)自定义拦截器-登录验证拦截器

时间:2017-07-01 18:26:32      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:string   需求   注释   users   并且   glob   pack   user   init   

需求:对登录进行验证,用户名cy 密码123456才能登录进去;

         登录进去后,将用户存在session中;

           其他链接要来访问(除了登录链接),首先验证是否登录,对这个进行拦截;

技术分享

com.cy.model.User.java:

技术分享
package com.cy.model;

public class User {
    private String userName;
    private String password;
    
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
}
View Code

com.cy.action.UserAction.java:

package com.cy.action;

import java.util.Map;

import com.cy.model.User;
import com.cy.service.UserService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{

    private static final long serialVersionUID = 1L;
    
    private User user;
    private UserService userService = new UserService();
    private String error;
    
    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }


    @Override
    public String execute() throws Exception {
        if(userService.login(user)){
            ActionContext actionContext = ActionContext.getContext();
            Map<String, Object> session = actionContext.getSession();
            session.put("currentUser", user);
            return SUCCESS;
        }else{
            this.error = "用户名或密码错误";
            return ERROR;
        }
    }
    
}

com.cy.action.GrilAction.java:

技术分享
package com.cy.action;

import com.opensymphony.xwork2.ActionSupport;

public class GrilAction extends ActionSupport{
    private static final long serialVersionUID = 1L;

    @Override
    public String execute() throws Exception {
        System.out.println("看美女");
        return SUCCESS;
    }
    
}
View Code

com.cy.interceptor.LoginInterceptor.java:

package com.cy.interceptor;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class LoginInterceptor implements Interceptor{
    
    private static final long serialVersionUID = 1L;

    public void destroy() {
        System.out.println("LoginInterceptor销毁");
    }
    
    public void init() {
        System.out.println("LoginInterceptor初始化");
    }
    
    public String intercept(ActionInvocation invocation) throws Exception {
        System.out.println("在Action执行之前");
        ActionContext actionContext = invocation.getInvocationContext();
        Map<String, Object> session = actionContext.getSession();
        Object currentUser = session.get("currentUser");
        String result = null;
        if(currentUser != null){
            result = invocation.invoke();
        }else{
            HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
            request.setAttribute("error", "请先登录!");
            result = "error";
        }
            
        System.out.println("在Action执行之后");
        
        return result;                            
    }

}

com.cy.service.UserService.java:

技术分享
package com.cy.service;

import com.cy.model.User;

public class UserService {
    
    public boolean login(User user){
        if("cy".equals(user.getUserName()) && "123456".equals(user.getPassword())){
            return true;
        }else{
            return false;
        }
    }
}
View Code

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    
    <package name="manage" namespace="/" extends="struts-default">
        <interceptors>
            <interceptor name="loginInterceptor" class="com.cy.interceptor.LoginInterceptor"></interceptor>
            
            <interceptor-stack name="myStack">
                <interceptor-ref name="loginInterceptor"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </interceptor-stack>
        </interceptors>
        
        <!-- package默认使用myStack 这个包下面的每个action默认使用myStack拦截器栈-->
        <default-interceptor-ref name="myStack"></default-interceptor-ref>
        
        <global-results>
            <result name="error">error.jsp</result>
        </global-results>
        
        <action name="gril" class="com.cy.action.GrilAction">
            <result name="success">success.jsp</result>
            
            <!-- 定义了默认的拦截器栈,这里就注释掉
                <interceptor-ref name="loginInterceptor"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
             -->
        </action>
        
        <action name="user" class="com.cy.action.UserAction">
            <result name="success">success.jsp</result>
            <!-- 因为登录的时候不需要进行登录验证,不需要使用loginInterceptor
                  因此这里就写defaultStack
                  写了defaultStack action就不会再使用其他的拦截器了。
             -->
            <interceptor-ref name="defaultStack"></interceptor-ref>
        </action>
        
    </package>
    
</struts>

success.jsp:

技术分享
<body>
    当前用户: ${currentUser.userName}
</body>
View Code

error.jsp:

<body>
    错误信息:${error} <a href="login.jsp">登录</a>
</body>

login.jsp:

技术分享
<body>
    <form action="user" method="post">
        用户名: <input type="text" name="user.userName"/><br>
        密码: <input type="text" name="user.password"/><br>
        <input type="submit" value="登录" />
    </form>
</body>
View Code

 

测试:

没有登录,直接访问gril链接:

技术分享

 

进行登录,并且登录成功:

技术分享技术分享

 

再次访问gril链接就ok了,console:

在Action执行之前
看美女
在Action执行之后

 

 

-------------

struts2学习(6)自定义拦截器-登录验证拦截器

标签:string   需求   注释   users   并且   glob   pack   user   init   

原文地址:http://www.cnblogs.com/tenWood/p/7102772.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!