springboot关于WebMvcConfigurate

页面跳转控制器

Spring Boot 中使用页面视图,比如 Thymeleaf。要跳转显示某个页面,必须通过 Controller 对象。也就是我们需要创建一个 Controller,转发到一个视图才行。如果我们现在需要显示页面,可以无需这个 ControlleraddViewControllers0完成从请求到视图跳转。需求:访问/welcome跳转到项目首页indexhtml(Thyemeleaf 创建的对象)

//springmvc的配置:使用JavaConfig的方式配置SpringMVC,代替原来的xml配置文件* SpringMVC
@Configuration
public class MvcSettings implements WebMvcConfiqurer {
	//页面跳转控制器, 从请求直达视图页面 (无需controtTer)@Override
	public void addViewControllers(ViewControllerRegistry registry) {
	//配置页面控制:addviewController("请求uri"), 指定他的视图setviewName(目标视图)
	registry.addViewController( uriPathorPattern:"/welcome").setViewName("index")}
}	

数据格式化

Formatter是数据转换接口,将一种数据类型转换为另一种数据类型。与 Formatter功能类型的还有Converter<S,T>。
Spring中内置了一下Formatter:
DateFormatter: String和Date之间的解析与格式化
InetAddressFormatter :String和InetAddress 之间的解析与格式化
PercentStyleFormatter : String 和Number 之间的解析与格式化带货币符合
NumberFormat:String和Number 之间的解析与格式化

@Data
public class DeviceInfo {
    private String item1;
    private String item2;
    private String item3;
    private String item4;
    private String item5;
}
public class DeviceFormatter implements Formatter<DeviceInfo> {
    @Override
    public DeviceInfo parse(String text, Locale locale) throws ParseException {
        DeviceInfo info = null;
        if(StringUtils.hasLength(text)){
            String[] item = text.split(";");
            info = new DeviceInfo();
            info.setItem1(item[0]);
            info.setItem2(item[1]);
            info.setItem3(item[2]);
            info.setItem4(item[3]);
            info.setItem5(item[4]);
        }
        return info;
    }

    @Override
    public String print(DeviceInfo object, Locale locale) {
        StringJoiner stringJoiner = new StringJoiner("#");
        stringJoiner.add(object.getItem1()).add(object.getItem2()).add(object.getItem3())
                .add(object.getItem4()).add(object.getItem5());
        return stringJoiner.toString();
    }
}

格式化的数据

###
POST http://localhost:8080/device/add
Content-Type: application/x-www-form-urlencoded

device=1111; 2222; 333,NF; 4; 561
接收的信息:DeviceInfo(item1=1111, item2= 2222, item3= 333,NF, item4= 4, item5= 561)

拦截器

HandlerInterceptor 接口和它的实现类称为拦截器,是 SpringMVC 的一种对象。拦截器是 Spring MVC 框架的对象与 Servlet 无关。拦截器能够预先处理发给 Controller 的请求。可以决定请求是否被 Controller 处理。用户请求是先由 DispatcherServlet 接收后,在 Controller 之前执行的拦截器对象。

一个项目中有众多的拦截器:框架中预定义的拦截器, 自定义拦截器。下面我说说自定义拦截器的应用。根据拦截器的特点,类似权限验证,记录日志,过滤字符,登录 token 处理都可以使用拦截器
拦截器定义步骤:

1声明类实现HandlerInterceptor 接口,重写三个方法(需要那个重写那个)
2登记拦截器

public class ArticleInterceptor implements HandlerInterceptor {

    public static final String COMMON_USER = "zhangsan";

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        System.out.println("======拦截器======");
        //用户
        String loginUser = request.getParameter("loginUser");
        //uri
        String uri = request.getRequestURI();

        //拦截请求
        if(loginUser.equals(COMMON_USER) &&(
            uri.startsWith("/article/delete")||
                uri.startsWith("/article/add")||
                uri.startsWith("/article/edit"))){
            return false;
        }
        return true;
    }
}
public class LoginInterceptor implements HandlerInterceptor {
	private List<String> permitUser = new ArrayList();
	public.LoginInterceptor(){
		this.permitUser = Arrays.asList("zhangsan"," isi","admin");
	}	
	@Override
	public boolean preHandle(HttpServletReguest request,HttpServletResponse response, Object handler)
		throws Exception {
		System.out.println("====================");
		String loginUser = request.getParameter( name: " oqinUser");
		if(StringUtils.hasText(loginUser) && permitUser.contains(loqinUser)){
			return true:
		}	
		return false;
	}	
}	
@Configuration
public class MvcSettings implements WebMvcConfigurer {
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		//权限拦截器
		AuthInterceptor authInterceptor = new AuthInterceptor();
		registry.addInterceptor(authInterceptor)
			.order(2)addPathPatterns("/article/**") //拦截以article开头的所有请求
			.excLudePathPatterns("/article/query"); //不拦截的地址
		// 登录拦截器
		LoginInterceptor loginInterceptor = new LoginInterceptor();
		reqistry.addInterceptor(loginInterceptor)
			.order(1) //顺序,整数值,越小先执行
			.addPathPatterns("/**") //拦截所有对controller的请求excludePathPatterns("/article/query"); //排除
	}	
}	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值