获得感言
当收到消息的那一刻,我才想起开学时老师说过的'小黄衫',很意外也很惊喜。
致谢
感谢彭老师对我们小组的肯定,感谢邹欣老师、周筠老师背后的构建之法团队,《构建之法》这本书中把枯燥的理论概念讲解得非常生动,寓教于乐,深入浅出,举出的例子也是形象而易懂,读完之后很受启发。
个人收获
经过一学期软件工程课程的学习以及《构建之法》带来的启发,我从理论和实践2方面了解的一个完整的软件的开发过程,软件工程团队应该如何配合,分工合作直至完成任务。
也学会了一系列编程技能,比如优化程序效率,github团队开发.
解决问题案例:
问题
首次编写前后端分离项目的时候,前端向后端发送数据请求,总是拿不到想要的json数据.
分析
经过向大佬请教和使用百度搜索,最终发现这是一个跨域的问题.出于浏览器的安全策略,收到同源策略的限制,当前域名的js只能读取同域下的窗口属性。什么叫做同源策略?就是不同的域名, 不同端口, 不同的协议不允许共享资源的,保障浏览器安全。
解决
Http协议中的请求头Origin
用来说明请求从哪里发起的,包括,且仅仅包括协议和域名。
这个参数一般只存在于CORS跨域请求中,可以看到response有对应的header:Access-Control-Allow-Origin。
我们可以在服务端增加一个响应头Access-Control-Allow-Origin来告诉浏览器我们支持它获取就可以了.
所以使用拦截器在Response Header中增加 "Access-Control-Allow-Origin: *"
import org.springframework.core.annotation.Order;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 跨域的设置问题
* @author tonywu
* @version v1.0.0
*/
//@Component //在启动类加了@ServletComponentScan无需加这个了
@Order(3)//设置优先级加载
//@ServletComponentScan //加载启动类上了
@WebFilter(urlPatterns = "/*",filterName = "ACAFilter")
public class ACAFilter implements Filter {
/**
* 初始化
* @param filterConfig FilterConfig
* @throws ServletException
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
/**
* 过滤
* @param servletRequest
* @param servletResponse
* @param filterChain
* @throws IOException
* @throws ServletException
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse)servletResponse;
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,content-type");
//((HttpServletResponse)servletResponse).setHeader("Access-Control-Allow-Origin", "*");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("to access control allow origin");
}
/**
* 销毁
*/
@Override
public void destroy() {
}
}
关于团队
因为首次进行团队开发,很遗憾没有让每个团队成员都参与到代码的编写中来.但是每个人不管是用例模型的设计,还是需求文档的编写,都尽出自己的一份力量,为这个团队的项目做出了必要的贡献.
最后
希望自己继续加油,提高自己的专业能力.