问题记录

1,引入js的问题

<script type="text/javascript" src="/js/bootstrap/js/bootstrap.min.js"></script>

引入时,不能省略结束标签,不能这样写

<script type="text/javascript" src="/js/bootstrap/js/bootstrap.min.js"/>

2,高并发时遇到的线程安全问题

		单例模式,高并发的情况下,单例类必须是无状态的,不能出现全局变量和静态变量,继承的类中也不可以出现全局变量。

3,ajax请求时报400的问题

可能是表单和参数的类型不一致,也可能是表单转化成javabean时,类型不一致。(表单提交的类型都是string类型)

4,@Autewera注入为null

	可能是某个地方直接new了注入bean的类,导致这个类中不能被spring容器注入bean。

4.1@Autewera注入为null

再一次遇到@autewera注入为null的问题,可能是spring容器加载的问题

5,Spring中使用@Autowired注解静态实例对象

不能@Autowired一个静态变量,使之成为一个Spring bean的。为什么?其实很简单,因为当类加载器加载静态变量时,Spring上下文尚未加载。所以类加载器不会在bean中正确注入静态类,并且会失败。
解决办法,建一个静态实例的setter方法,

 private static SortService sortService;
    @Autowired
    public void setSortService(SortService sortService){
        SortUtil.sortService=sortService;
    }

6,字段名与mybatis关键字冲突

冲突时在字段外面添加反单引号

<!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, title, contect, author, create_time, status, `like`, look, review, heat, top, `type`, release_form
    </sql>

7,ajax提交没有返回值的问题

触发提交的按钮不能是button,问题就出在这个form标签,button按钮放在form标签内就不能接收到数据,放到form标签外就没事,可以是input 标签type=button
[连接](https://blog.csdn.net/to10086/article/details/101030558)

8,shiro过滤器,过滤器拦截器优先级问题

过滤器Filter的优先级是要大于springMVC的拦截器Interceptor的。或者说,当有访问来到时,是先执行Filter里的逻辑,然后在执行Interceptor的。而shiro的Filter会代理web的Filter,所以会先执行shiro的过滤器在执行springMVC的拦截器。
————————————————
原文链接:https://blog.csdn.net/tyoukai_/article/details/78480359

如果in查询是在符合最左原则的前提下,是可以正常使用的索引的。但是如果in查询的前面有范围查询,那么联合索引失效,自然我们的in查询也就用不到索引了

mybatis二级缓存默认开启
二级缓存的使用原则

9,只能在一个命名空间下使用二级缓存

1,由于二级缓存中的数据是基于namespace的,即不同namespace中的数据互不干扰。在多个namespace中若均存在对同一个表的操作,那么这多个namespace中的数据可能就会出现不一致现象。
2,在单表上使用二级缓存如果一个表与其它表有关联关系,那么久非常有可能存在多个namespace对同一数据的操作。而不同namespace中的数据互补干扰,所以就有可能出现多个namespace中的数据不一致现象。
,3,查询多于修改时使用二级缓存
在查询操作远远多于增删改操作的情况下可以使用二级缓存。因为任何增删改操作都将刷新二级缓存,对二级缓存的频繁刷新将降低系统性能。

10,@PostConstruct注解与@PreDestroy

Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。
在这里插入图片描述

组合生命周期机制

从Spring 2.5开始, 可以使用三个选项来控制Bean生命周期行为:
InitializingBean和DisposableBean回调接口 自定义init()和destroy()方法
@PostConstruct和@PreDestroy注解。 可以结合使用这些机制来控制给定的bean。

如果为一个bean配置了多个生命周期机制,并且为每个机制配置了不同的方法名称,则将按照下面列出的顺序执行每个已配置的方法。 但是,如果为多个生命周期机制中的多个生命周期机制配置了相同的方法名称,则该方法将执行一次。就是 xml 配置了 注解也加了 同样的方法 方法只会执行一次。
为同一个bean配置的具有不同初始化方法的多种生命周期顺序如下:

方法上面添加注解 @PostConstruct
afterPropertiesSet() 由InitializingBean回调接口定义
定制配置的init()方法

销毁方法的调用顺序相同:

用@PreDestroy注解的方法

由DisposableBean回调接口定义的destroy()

定制配置的destroy()方法

11,重写hashcode后导致的内存泄露问题

重写hashcode方法的类对象,在放入hash表后,一定要谨慎操作对象字段属性值。如果要修改,先从哈希表中删除该对象,修改后再放入哈希表。

https://blog.csdn.net/iteye_555/article/details/82551645

12,跨域

方法一:在controller中加上注解@CrossOrigin

@Controller
@CrossOrigin
public class LoginController extends BaseController {

方法二:使用网关

@Configuration
public class CorsConfig {
    @Bean
    public CorsWebFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedMethod("*");
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**", config);

        return new CorsWebFilter(source);
    }
}

方法三:使用过滤器

@WebFilter("/*")
public class SimpleCORSFilter implements Filter{  
  
    @Override  
    public void destroy() {  
          
    }  
  
    @Override  
    public void doFilter(ServletRequest req, ServletResponse res,  
            FilterChain chain) throws IOException, ServletException {  
            HttpServletResponse response = (HttpServletResponse) res;  
            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");  
            chain.doFilter(req, res);  
          
    }  
  
    @Override  
    public void init(FilterConfig arg0) throws ServletException {  
          
    }  

13,js方法

Object.assign()
Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象。
Array.prototype.some()
some() 方法测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值。

function hasPermission(roles, route) {
  if (route.meta && route.meta.roles) {
    return roles.some(role => route.meta.roles.includes(role))
  } else {
    return true
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
web.xml配置 因为我们是与spring进行集成的,而spring的基本就是web项目的xml文件。所以我们在web.xml中配置shiros的过滤拦截。正常情况下,我们需要将shiro的filter配置在所有的filter前面,当然和encodingFilter这个filter是不区分前后的。因为两者互相不影响的。spring-shiro.xml 这里我们将来看看spring-shiro.xml的配置,这里我采取倒叙的方式讲解,我觉的倒叙更加的有助于我们理解代码。首先我们还记得在web.xml中配置的那个filter吧,名字shiroFilter,对spring-shiro.xml配置文件就是通过这个filter展开的。首先我们在web.xml配置的过滤器实际上是配置ShiroFilterFactoryBean,所以在这里需要将ShiroFilterFactoryBean定义为shiroFilter <!-- Shiro的核心安全接口,这个属性是必须的 --> <!-- 要求登录时的链接(可根据项目的URL进行替换),非必须的属性,默认会自动寻找Web工程根目录下的"/login.html"页面 --> <!-- 登录成功后要跳转的连接 --> <!-- 用户访问未对其授权的资源时,所显示的连接 --> <!-- 若想更明显的测试此属性可以修改它的值,如unauthor.jsp,然后用[玄玉]登录后访问/admin/listUser.jsp就看见浏览器会显示unauthor.jsp --> <!-- Shiro连接约束配置,即过滤链的定义 --> <!-- 此处可配合我的这篇文章来理解各个过滤连的作用http://blog.csdn.net/jadyer/article/details/12172839 --> <!-- 下面value值的第一个'/'代表的路径是相对于HttpServletRequest.getContextPath()的值来的 --> <!-- anon:它对应的过滤器里面是空的,什么都没做,这里.do和.jsp后面的*表示参数,比方说login.jsp?main这种 --> <!-- authc:该过滤器下的页面必须验证后才能访问,它是Shiro内置的一个拦截器org.apache.shiro.web.filter.authc.FormAuthenticationFilter --> /statics/**=anon /login.html=anon /sys/schedule.html=perms[sys:schedule:save] /sys/login=anon /captcha.jpg=anon /**=authc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值