vue+ssm+shiro---简单记录前后端分离开发踩过的坑

最近很忙,没有时间详细记录,只能简单写下流程为了温故而知新吧,毕竟是宝贵的项目经验 ... 

下面就是我写项目时的一些流程和注意点:

 

  1. 首先明确前后端分离是用json传数据
  2. 前后端分离逃不过跨域,但是后台只要配置filter就可
  3. 解决以上2点vue+ssm项目基本没问题了
  4. 加上shiro后就出现了很多问题:
  • 首先明白authc,anon.user是shiro内置的filter,而这些filter往往不能满足我们的需求,所以我们需要重写,这就需要阅读源码的功底了,网上的配置也不可能刚好符合你需求

加上shiro后发请求出现options,导致真正的post请求无法发送,解决办法:访问权限为anon的不需要考虑,不会出现options请求(我也没弄懂),当权限为user,authc时就会出现options,我是重写filter来预先处理options,一但遇到这个请求立马放行,这样客户端就会收到options返回的true信息,会紧接着发送第二次请求(真正的请求)


//继承的实际就是authc代表的过滤器,可以查阅源码重写父类的方法实现需求
public class CustomFormAuthenticationFilter extends FormAuthenticationFilter{
	
	
	//顾名思义,这是判断时候允许通过的方法,在这个方法里处理了options请求,
然后接下来直接调用父类的方法实现着个方法真正需要做的事-----总结起来就是我们重写filter时
,如果你能力够那么你彻底覆写也没问题,
相反,你可以先添加代码实现自己的需求,
再调用父类同名的方法实现这个方法在shiro真正做到的功能
	 @Override
	    protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
		   //处理options请求
	        if (request instanceof HttpServletRequest) {
	            if (((HttpServletRequest) request).getMethod().toUpperCase().equals("OPTIONS")) {
	                return true;
	            }
	        }
	        //如果不是option请求则调用父类方法处理
	        return super.isAccessAllowed(request, response, mappedValue);
	    }
	    


//请求未通过,肯定是没有通过shiro的认证
//重写这个方法防止跳转到Login
//自己看源码
	    @Override
	    protected boolean onAccessDenied(ServletRequest request, ServletResponse response)
	        throws Exception {
	    	  //防止乱码,适用于传输JSON数据
	         ((HttpServletResponse) response).setHeader("Content-Type","application/json;charset=UTF-8");
	         
	         PrintWriter out = response.getWriter();
	         out.println(JSONObject.toJSON(new ErrorMessage(0,"您还没有通过认证")));
	         out.flush();
	         out.close();
	         //不跳转到Login
	         return false;
	    }
}

就这么多了,写的很乱,能看的懂得人应该看得懂,看不懂得就图个乐吧----累了,睡觉!

附上项目shiro配置:


    
 	
		
	    
        
     
		
    
    
    
    
    
      
	
	
	  
    
     
       
       
        
        
       
        
        
    
    
    
     
        
                
                
                
                
        
    
    
    
    
    
                
                
    
   
   
   
    
    
    
    
	
	
    
    
    
    
    
    
    
         
    
          
    
    
    
    
        
        
        
        
        
        
        	
 
            
            
        	
        
    
    
    
      
        
        
        
        
        
      	
        
        
            
            /logout = logout 
            /user/login = anon
            /user/register = anon
            /user/email = anon
            /** = authc
		   
        
    

  	
    
        
    

  
    
    
    
    
    
    
    
    
    
 





 

你可能感兴趣的:(项目,Spring,springmvc)