随着业务的需求普通的springmvc+jsp已经不能满足我们的系统了,会逐渐把后台和前端展示分离开来,下面我们就来把普通的springmvc+jsp分为 springmvc只提供rest接口,前端用ajax请求接口渲染到html中。
后台提供接口是一个tomcat服务器
前台访问数据是nginx访问rest接口
但是有一个问题 ,发现没有。就是两个是不同的域名,所以存在跨域,下面我会把一些关键的代码贴出来。
首先解决接口访问跨域的问题。
自定义一个拦截请求的Filter
/*** post 跨域拦截
* @Project: children-watch-web-api
* @Class JsonpPostFilter
* @Description: TODO
*@authorcd 14163548@qq.com
* @date 2018年1月10日 下午4:12:11
*@versionV1.0*/@Componentpublic class JsonpPostFilter implementsFilter {
@Overridepublic void init(FilterConfig filterConfig) throwsServletException {
}
@Overridepublic void doFilter(ServletRequest servletRequest,ServletResponse servletResponse, FilterChain filterChain)throwsIOException, ServletException {
HttpServletResponse response=(HttpServletResponse) servletResponse;//String origin = (String) servletRequest.getRemoteHost() + ":"+ servletRequest.getRemotePort();//构造头部信息
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods","POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers","x-requested-with,Authorization,X-Token");
response.setHeader("Access-Control-Allow-Credentials", "true");
filterChain.doFilter(servletRequest, servletResponse);
}
@Overridepublic voiddestroy() {
}
}
然后再配置web.xml
cors
com.axq.watch.web.api.config.JsonpPostFilter
cors
/*
这样就可以实现跨域访问了。
接下来就是登陆的问题,
思路:
1.用户输入账号密码,到后台查询,正确返回服务器生成的token,错误返回相应的错误信息。
2.用户拿到token保存到本地cookie.
3.用户要调用相应的接口需要把token传入头部。
4.后台获取访问的接口,看头部是否有token,在比对是否过期。
实现代码
token接口
/*** REST 鉴权
* @Project: children-watch-api
* @Class TokenService
* @Description: 登录用户的身份鉴权</