Spring MVC 实现登录拦截认证

来源:互联网 发布:知已的反义词 编辑:程序博客网 时间:2024/06/08 05:37

1.Controller 

@Controller@RequestMappingpublic class LoginController {    @RequestMapping(value = "/login",method = RequestMethod.GET)    public ModelAndView index(){        return new ModelAndView("login");    }    @RequestMapping(value = "/login",method = RequestMethod.POST)    public ModelAndView login(HttpSession session,String eMail,String passWord){        ModelAndView mav = new ModelAndView("login");        if(eMail!=null&&passWord!=null&&eMail.equals("123456@qq.com")&&passWord.equals("123456")){            session.setAttribute("eMail",eMail);            mav.setViewName("a");        }        mav.addObject("sys_time",System.currentTimeMillis());        return mav;    }}

2.html

<#import "layout/spring.ftl" as spring/><!doctype html><html lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    <title>Login</title>    <link rel="stylesheet" href="<@spring.contextpath/>/css/style.css"></head><body><div class="loginform cf">    <form name="to_login" action="<@spring.contextpath/>/login" method="post" accept-charset="utf-8">        <ul>            <li>                <label for="usermail">Email</label>                <input type="email" name="eMail" placeholder="yourname@email.com" required>            </li>            <li>                <label for="password">Password</label>                <input type="password" name="passWord" placeholder="password" required>            </li>            <li>                <input type="submit" value="登录">            </li>        </ul>    </form></div></body></html>

3.web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">    <!--加载配置文件--><context-param><param-name>contextConfigLocation</param-name><param-value>            classpath:spring-*.xml        </param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>    <!-- 防止spring内存溢出监听器 -->    <listener>        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>    </listener>    <!--配置spring框架的Servlet--><servlet><servlet-name>appServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:servlet-context.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet>    <servlet-mapping>        <servlet-name>appServlet</servlet-name>        <url-pattern>/*</url-pattern>    </servlet-mapping>    <!--拦截请求进行字符编码转换-->    <filter>        <filter-name>SetCharacterEncoding</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>    </filter>    <filter-mapping>        <filter-name>SetCharacterEncoding</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <!-- 设置session超时时间-->    <session-config>        <session-timeout>10</session-timeout>    </session-config>    <welcome-file-list>        <welcome-file>views/login.ftl</welcome-file>    </welcome-file-list></web-app>

4.springmvc.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:mvc="http://www.springframework.org/schema/mvc"       xmlns:p="http://www.springframework.org/schema/p"       xmlns:util="http://www.springframework.org/schema/util"       xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans.xsd       http://www.springframework.org/schema/context       http://www.springframework.org/schema/context/spring-context.xsd       http://www.springframework.org/schema/mvc       http://www.springframework.org/schema/mvc/spring-mvc.xsd       http://www.springframework.org/schema/util       http://www.springframework.org/schema/util/spring-util.xsd">    <!-- 添加注解驱动 -->    <context:annotation-config/>    <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->    <context:component-scan base-package="com.biometrics.controller"/>    <!-- 对静态资源的访问 -->    <mvc:resources mapping="/resources/**" location="/WEB-INF/"/>    <mvc:resources location="/static/" mapping="/**"/>    <!-- jsp视图解析器  -->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"          p:prefix="/WEB-INF/views/"          p:suffix=".jsp"          p:order="2"/>    <!-- freeMarker视图解析器 -->    <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"          p:viewClass="org.springframework.web.servlet.view.freemarker.FreeMarkerView"          p:contentType="text/html;charset=utf-8"          p:requestContextAttribute="request"          p:cache="true"          p:suffix=".ftl"          p:order="1"/>    <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"          p:freemarkerSettings-ref="freemarkerSettings"          p:templateLoaderPath="/WEB-INF/views/"/>    <util:properties id="freemarkerSettings">        <prop key="default_encoding">UTF-8</prop>        <prop key="url_escaping_charset">UTF-8</prop>        <prop key="template_update_delay">1</prop>        <prop key="tag_syntax">auto_detect</prop>        <prop key="whitespace_stripping">true</prop>        <prop key="classic_compatible">true</prop>        <prop key="number_format">0.##########</prop>        <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>        <prop key="template_exception_handler">ignore</prop>        <prop key="object_wrapper">freemarker.ext.beans.BeansWrapper</prop>    </util:properties>    <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->    <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver"          p:defaultEncoding="utf-8"          p:maxUploadSize="10485760000"          p:maxInMemorySize="40960"/>    <!-- 会自动注册了validator  ConversionService  -->    <!-- StringHttpMessageConverter编码为UTF-8,防止乱码 -->    <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->    <mvc:annotation-driven>        <mvc:message-converters register-defaults="true">            <bean class="org.springframework.http.converter.StringHttpMessageConverter"                  p:supportedMediaTypes-ref="supportedMediaTypes">                <constructor-arg value="UTF-8"/>            </bean>            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"                  p:supportedMediaTypes-ref="supportedMediaTypes"/>        </mvc:message-converters>    </mvc:annotation-driven>    <util:list id="supportedMediaTypes">        <ref bean="mediaType1"/>        <ref bean="mediaType2"/>    </util:list>    <!-- 数据交互类型设定 -->    <bean id="mediaType1" class="org.springframework.http.MediaType">        <constructor-arg index="0" value="text"/>        <constructor-arg index="1" value="plain"/>        <constructor-arg index="2" value="UTF-8"/>    </bean>    <bean id="mediaType2" class="org.springframework.http.MediaType">        <constructor-arg index="0" value="*"/>        <constructor-arg index="1" value="*"/>        <constructor-arg index="2" value="UTF-8"/>    </bean>    <!-- 拦截器 -->    <mvc:interceptors>        <!-- 多个拦截器,顺序执行 -->        <mvc:interceptor>            <mvc:mapping path="/*"/>            <bean class="com.biometrics.common.interceptor.LoginInterceptor">               <property name="adminLoginUrl" value="login"/>               <property name="frontLoginUrl" value="login"/>            </bean>        </mvc:interceptor>    </mvc:interceptors></beans>

5.LoginInterceptor

package com.biometrics.common.interceptor;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;/** * Created by static on 2017/4/13. * 登录认证拦截器 */public class LoginInterceptor extends HandlerInterceptorAdapter {    private String adminLoginUrl;    private String frontLoginUrl;    /**     * Handler执行完成之后调用这个方法     */    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,                                Object handler, Exception exc) throws Exception {    }    /**     * Handler执行之后,ModelAndView返回之前调用这个方法     */    public void postHandle(HttpServletRequest request, HttpServletResponse response,                           Object handler, ModelAndView modelAndView) throws Exception {    }    /**     * Handler执行之前调用这个方法     */    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,                             Object handler) throws Exception {        //获取请求的URL        String url = request.getRequestURI();        //URL:login是公开的;其它的URL都进行拦截控制        if (url.indexOf(adminLoginUrl) >= 0) {            return true;        }        //获取Session        HttpSession session = request.getSession();        String username = (String) session.getAttribute("eMail");        if (username != null) {            return true;        }        //不符合条件的,跳转到登录界面        request.getRequestDispatcher(frontLoginUrl).forward(request, response);        return false;    }    public void setAdminLoginUrl(String adminLoginUrl) {        this.adminLoginUrl = adminLoginUrl;    }    public void setFrontLoginUrl(String frontLoginUrl) {        this.frontLoginUrl = frontLoginUrl;    }}














0 0
原创粉丝点击