atcrowdfunding-web

com.itliupengcheng.atcrowdfunding.controller

package com.atguigu.atcrowdfunding.controller;

import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.atguigu.atcrowdfunding.bean.AJAXResult;
import com.atguigu.atcrowdfunding.bean.Permission;
import com.atguigu.atcrowdfunding.bean.User;
import com.atguigu.atcrowdfunding.service.PermissionService;
import com.atguigu.atcrowdfunding.service.UserService;

@Controller
public class DispatcherController {

    @Autowired
    private UserService userService;
    @Autowired
    private PermissionService permissionService;
    
    @RequestMapping("/login")
    public String login() {
        return "login";
    }
    
    @RequestMapping("/error")
    public String error() {
        return "error";
    }
    
    @RequestMapping("/logout")
    public String logout(HttpSession session) {
        //session.removeAttribute("loginUser");
        session.invalidate();
        return "redirect:login";
    }
    
    @RequestMapping("/main")
    public String main() {
        return "main";
    }
    
    @ResponseBody
    @RequestMapping("/doAJAXLogin")
    public Object doAJAXLogin(User user, HttpSession session) {
        
        AJAXResult result = new AJAXResult();
        
        User dbUser = userService.query4Login(user);
        if ( dbUser != null ) {
            session.setAttribute("loginUser", dbUser);
            
            //
            List<Permission> permissions = permissionService.queryPermissionsByUser(dbUser);
            Map<Integer, Permission> permissionMap = new HashMap<Integer, Permission>();
            Permission root = null;
            Set<String> uriSet = new HashSet<String>();
            for ( Permission permission : permissions ) {
                permissionMap.put(permission.getId(), permission);
                if ( permission.getUrl() != null && !"".equals(permission.getUrl()) ) {
                    uriSet.add(session.getServletContext().getContextPath() + permission.getUrl());
                }
            }
            session.setAttribute("authUriSet", uriSet);
            for ( Permission permission : permissions ) {
                Permission child = permission;
                if ( child.getPid() == 0 ) {
                    root = permission;
                } else {
                    Permission parent = permissionMap.get(child.getPid());
                    parent.getChildren().add(child);
                }
            }
            session.setAttribute("rootPermission", root);
            result.setSuccess(true);
        } else {
            result.setSuccess(false);
        }
        
        return result;
    }
    
    /**
     * 鎵ц鐧婚檰
     * @return
     */
    @RequestMapping("/doLogin")
    public String doLogin( User user, Model model ) throws Exception {
        
        String loginacct = user.getLoginacct();
        
        User dbUser = userService.query4Login(user);
        
        // 3) 鍒ゆ柇鐢ㄦ埛淇℃伅鏄惁瀛樺湪
        if ( dbUser != null ) {
            // 鐧婚檰鎴愬姛锛岃烦杞埌涓婚〉闈�
            return "main";
        } else {
            // 鐧婚檰澶辫触锛岃烦杞洖鍒扮櫥闄嗛〉闈紝鎻愮ず閿欒淇℃伅
            String errorMsg = "鐧婚檰璐﹀彿鎴栧瘑鐮佷笉姝g‘锛岃閲嶆柊杈撳叆";
            model.addAttribute("errorMsg", errorMsg);
            return "redirect:login";
        }
        
        
    }
}
DispatcherControlle.java

com.itliupengcheng.atcrowdfunding.web

package com.atguigu.atcrowdfunding.web;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.atguigu.atcrowdfunding.bean.Permission;
import com.atguigu.atcrowdfunding.service.PermissionService;

public class AuthInterceptor extends HandlerInterceptorAdapter {

    @Autowired
    private PermissionService permissionService;
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        // 鑾峰彇鐢ㄦ埛鐨勮姹傚湴鍧�
        String uri = request.getRequestURI();
        String path = request.getSession().getServletContext().getContextPath();
        
        // 鍒ゆ柇褰撳墠璺緞鏄惁闇�瑕佽繘琛屾潈闄愰獙璇併��
        // 鏌ヨ鎵�鏈夐渶瑕侀獙璇佺殑璺緞闆嗗悎
        List<Permission> permissions = permissionService.queryAll();
        Set<String> uriSet = new HashSet<String>();
        for ( Permission permission : permissions ) {
            if ( permission.getUrl() != null && !"".equals(permission.getUrl()) ) {
                uriSet.add(path + permission.getUrl());
            }
        }
        
        if ( uriSet.contains(uri) ) {
            Set<String> authUriSet = (Set<String>)request.getSession().getAttribute("authUriSet");
            if ( authUriSet.contains(uri) ) {
                return true;
            } else {
                response.sendRedirect(path + "/error");
                return false;
            }
        } else {
            return true;
        }
    }

}
AuthInterceptor.java
package com.atguigu.atcrowdfunding.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.atguigu.atcrowdfunding.bean.User;

/**
 * 鐧婚檰鎷︽埅鍣�
 * @author 18801
 *
 */
public class LoginInterceptor implements HandlerInterceptor {

    /**
     * 鍦ㄦ帶鍒跺櫒鎵ц涔嬪墠瀹屾垚涓氬姟閫昏緫鎿嶄綔
     * 鏂规硶鐨勮繑鍥炲�煎喅瀹氶�昏緫鏄惁缁х画鎵ц锛� true锛岃〃绀虹户缁墽琛岋紝 false, 琛ㄧず涓嶅啀缁х画鎵ц銆�
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        
        // 鍒ゆ柇褰撳墠鐢ㄦ埛鏄惁宸茬粡鐧婚檰
        HttpSession session = request.getSession();
        User loginUser = (User)session.getAttribute("loginUser");
        
        if ( loginUser == null ) {
            String path = session.getServletContext().getContextPath();
            response.sendRedirect(path + "/login");
            return false;    
        } else {
            return true;
        }
    }

    /**
     * 鍦ㄦ帶鍒跺櫒鎵ц瀹屾瘯涔嬪悗鎵ц鐨勯�昏緫鎿嶄綔
     */
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // TODO Auto-generated method stub

    }

    /**
     * 鍦ㄥ畬鎴愯鍥炬覆鏌撲箣鍚庯紝鎵ц姝ゆ柟娉曘��
     */
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        
    }

}
LoginInterceptor.java
package com.atguigu.atcrowdfunding.web;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ServerStartupListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent sce) {
        // 灏唚eb搴旂敤鍚嶇О锛堣矾寰勶級淇濆瓨鍒癮pplication鑼冨洿涓�
        ServletContext application = sce.getServletContext();
        String path = application.getContextPath();
        application.setAttribute("APP_PATH", path);
    }

    public void contextDestroyed(ServletContextEvent sce) {
        // TODO Auto-generated method stub

    }

}
ServerStartupListener.java

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        
    </typeAliases>
</configuration>
config.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:spring/spring-*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <listener>
        <listener-class>com.atguigu.atcrowdfunding.web.ServerStartupListener</listener-class>
    </listener>
    
    <filter>
        <filter-name>encoding</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <servlet-name>springmvc</servlet-name>
    </filter-mapping>
    
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/springmvc-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
web.xml

 

posted @ 2019-06-02 20:33  魅力之城  阅读(295)  评论(0编辑  收藏  举报