拦截器实现登录拦截
controller层
package com.xf.controller;
import com.xf.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpSession;
@Controller
public class UserController {
@RequestMapping("/toLogin")
public String toLogin(){
return "login";
}
@RequestMapping("/login")
public String login(User user,Model model,HttpSession session){
System.out.println(user.getUname());
if("zhangsan".equals(user.getUname())&&"123456".equals(user.getUpwd())){
session.setAttribute("user",user);
return "redirect:main";
}
model.addAttribute("msg","用户名或密码错误");
return "login";
}
@RequestMapping("/main")
public String toMain(){
return "main";
}
@RequestMapping("/logout")
public String logout(HttpSession session){
session.invalidate();
return "login";
}
}
entity
package com.xf.entity;
/**
* @author xfgg
*/
public class User {
private String uname;
private String upwd;
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
}
}
interceptor
package com.xf.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* @author xfgg
*/
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws ServletException, IOException {
/**
* 获取请求的url
*/
String url=request.getRequestURI();
/**
* login.jsp或者登录请求放行
*/
if(url.indexOf("/toLogin")>=0||url.indexOf("/login")>=0){
return true;
}
/**
* 获取session
*/
HttpSession session=request.getSession();
Object obj =session.getAttribute("user");
if(obj!=null){
return true;
}
request.setAttribute("msg","还没登录请先登录");
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
return false;
}
@Override
public void afterCompletion(HttpServletRequest arg0,HttpServletResponse arg1,Object arg2,Exception arg3) throws Exception{
//TODO Auto-generated method stub
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception{
//TODO Auto-generated method stub
}
}
配置文件
springmvc-servlet.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
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">
<!-- 使用扫描机制扫描控制器类 -->
<context:component-scan base-package="com.xf.controller" />
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.xf.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
</beans>
web.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"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<!--配置DispatcherServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
validator信息验证器
controller层
package com.xf.controller;
import com.xf.entity.Goods;
import com.xf.service.GoodsService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Validator;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author xfgg
*/
@Controller
@RequestMapping("/goods")
public class GoodsController {
private static final Log logger = LogFactory.getLog(GoodsController.class);
@Autowired
private GoodsService goodsService;
@Resource
private Validator validator;
public GoodsController(Validator validator) {
this.validator = validator;
}
@RequestMapping("/input")
public String input(Model model){
model.addAttribute("goods",new Goods());
return "addGoods";
}
@RequestMapping("/save")
public String save(@ModelAttribute Goods goods, BindingResult result,Model model){
this.validator.validate(goods,result);
if(result.hasErrors()){
return "addGoods";
}
goodsService.save(goods);
logger.info("添加成功");
model.addAttribute("goodsList", goodsService.getGoods());
return "goodsList";
}
}
entity
package com.xf.entity;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* @author xfgg
*/
public class Goods {
private String gname;
private String gdescription;
private double gprice;
@DateTimeFormat(pattern = "yyy-MM-dd")
private Date gdate;
public Date getGdate() {
return gdate;
}
public void setGdate(Date gdate) {
this.gdate = gdate;
}
public String getGname() {
return gname;
}
public void setGname(String gname) {
this.gname = gname;
}
public String getGdescription() {
return gdescription;
}
public void setGdescription(String gdescription) {
this.gdescription = gdescription;
}
public double getGprice() {
return gprice;
}
public void setGprice(double gprice) {
this.gprice = gprice;
}
}
service层
service接口
package com.xf.service;
import com.xf.entity.Goods;
import java.util.ArrayList;
/**
* @author xfgg
*/
public interface GoodsService {
public boolean save(Goods g);
public ArrayList<Goods> getGoods();
}
service方法实现
package com.xf.service.impl;
import com.xf.entity.Goods;
import com.xf.service.GoodsService;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
/**
* @author xfgg
*/
@Service
public class GoodsServiceImpl implements GoodsService {
private static ArrayList<Goods> goods = new ArrayList<Goods>();
@Override
public boolean save(Goods g) {
goods.add(g);
return true;
}
@Override
public ArrayList<Goods> getGoods() {
return goods;
}
}
validator
package com.xf.validator;
import com.xf.entity.Goods;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import java.util.Date;
/**
* @author xfgg
*/
@Component
public class GoodsValidator implements Validator {
@Override
public boolean supports(Class<?> klass){
return Goods.class.isAssignableFrom(klass);
}
@Override
public void validate(Object object, Errors errors) {
Goods goods=(Goods) object;
ValidationUtils.rejectIfEmpty(errors,"gname","goods.gname.required");
ValidationUtils.rejectIfEmpty(errors,"gdescription","goods.gdesctiption.required");
if (goods.getGprice()>100||goods.getGprice()<0){
errors.rejectValue("gprice","gprice.invalid");
}
Date goodsDate = goods.getGdate();
if(goodsDate!=null&&goodsDate.after(new Date())){
errors.rejectValue("gdate","gdate.invalid");
}
}
}
配置文件
errorsMessages.properties
goods.gname.required=请输入商品名称
goods.gdesctiption.required=请输入商品详情
gprice.invalid=价格为0~100
gdate.invalid=创建日期不能在系统日期之后
messagesource.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/resources/errorMessages.properties" />
</bean>
</beans>
springmvc-servlet.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
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">
<context:component-scan base-package="com.xf.service"/>
<context:component-scan base-package="com.xf.controller"/>
<context:component-scan base-package="com.xf.validator"/>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/resources/errorMessages.properties" />
</bean>
</beans>
web.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"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<!--配置DispatcherServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--避免中文乱码-->
<filter>
<filter-name>encodingFilter</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>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>