Note_56 SpringSecurity 进阶

一、密码加密
1.spring-security.xml 配置
	
    
	
	
	
    
        
        
			
            
        
    
	
	
2.数据加密
	//注入加密类
	@Autowired
    private BCryptPasswordEncoder passwordEncoder;
    
    /* 
		加密方法  同一字符串每次加密结果也不一样
		将加密过的数据传入 spring security 框架会自动解密比对
	*/
    public String getEndcode(String str) {
        return passwordEncoder.encode(str);
    }
	
	
二、权限控制
1.jsr250 注解使用步骤
	① 导包
		
            javax.annotation
            jsr250-api
            1.0
        
	② 开启 jsr 注解支持
		
	③ 在想要控制的 Controller 层方法上加注解
		@RolesAllowed("ROLE_ADMIN")

2.@Secured
	① 开始注解支持
		
	② 加 @Secured 注解
	
3.支持表达式的注解
	① 配置文件
		
	②注解
		@PreAuthorize("#userId == authentication.principal.userId or hasAuthority('ADMIN')")
		void changePassword(@P("userId")long userId){}
		
4.页面权限控制(无权限不显示)
	① 导包
		
            org.springframework.security
            spring-security-taglibs
            5.0.1.RELEASE
        
	② 导入标签库
		<%@taglib prefix="security" uri="http://www.springframework.org/security/tags" %>
	③ 获取登录的用户信息
		
	④ 隐藏控件
		
			show
		
		
	# 此处使用的是 SPEL 表达式标识权限,需要将  
	# 或者注入 


三、SSMAOP日志
1.开启 aop 注解支持
	* 

2.切面类
@Component
@Aspect
public class Syslog {

    @Autowired
    private HttpServletRequest request;

    @Around("execution(* com.softwareMan.controller.*.*(..))")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {

        //开始执行时间
        Date start = new Date();

        //执行方法,传入参数
        Object proceed = pjp.proceed(pjp.getArgs());

        //执行结束时间
        Date end = new Date();

        //执行时间
        long l = end.getTime() - start.getTime();

        //执行方法名称
        pjp.getSignature().getName();

        //请求ip地址
        request.getRemoteAddr();

        //请求 url
        request.getRequestURL().toString();

        //从 session 中获取 spring security 存入的用户信息
        SecurityContextImpl ssc = (SecurityContextImpl)request.getSession().getAttribute("SPRING_SECURITY_CONTEXT");
        ssc.getAuthentication().getName();

        return proceed;
    }

}



 

你可能感兴趣的:(Java,EE)