Spring security 权限控制

方法级别权限控制

1.jsr250

   1.需要坐标 

        
            javax.annotation
            jsr250-api
            1.0
        

 2.在配置文件spring-security.xml 中开启 注解  默认是关闭的

3.在控制器中 添加注解 @RolesAllowed("ADMIN")   可以写多个角色       可以省略       只有 有admin角色的用户才能访问

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/findAll.do")
    @RolesAllowed("ADMIN")                只有 有admin角色的用户才能访问
    public ModelAndView findAll() {
        ModelAndView mv = new ModelAndView();
        List list=iUserService.findAll();
        mv.addObject("userList",list);
        mv.setViewName("user-list");
        return mv;
    }
}

@PermitAll    表示允许所有的角色进行访问,也就是说不进行权限控制
@DenyAll      是和PermitAll相反的,表示无论什么角色都不能访问

  4.权限不足时 前端会报 403 权限不足的错误 可以在web.xml配置 错误页面      将页面放在webapp下

  
    403
    /403.jsp
  

2.Secured注解

  是Spring 自带的注解 不需要再导入包了

 在spring-security.xml配置文件 开启注解 功能

 
     @RequestMapping("/findAll.do")
//    @RolesAllowed("ADMIN")
    @Secured("ROLE_ADMIN")
    public ModelAndView findAll() {
        ModelAndView mv = new ModelAndView();
        List list=iUserService.findAll();
        mv.addObject("userList",list);
        mv.setViewName("user-list");
        return mv;
    }

 与jsr250区别是   必须写配置文件中声明的  拦截角色名称   


        
        

        
        

        
        
        

    

Secured注解 支持spl表达式

  需要在  spring-security.xml 开启功能

 

   "hasRole('ROLE_ADMIN')"     只有ROLE_ADMIN 角色的用户 才能查询所有

 @RequestMapping("/findAll.do")
//    @RolesAllowed("ADMIN")
//    @Secured("ROLE_ADMIN")
    @PreAuthorize("hasRole('ROLE_ADMIN')")            
    public ModelAndView findAll() {
        ModelAndView mv = new ModelAndView();
        List list=iUserService.findAll();
        mv.addObject("userList",list);
        mv.setViewName("user-list");
        return mv;
    }

  "authentication.principal.username == 'wyc'"    只有用户名为wyc 的用户才能使用save方法

    @RequestMapping("/save.do")
    @PreAuthorize("authentication.principal.username == 'wyc'")
    public String saveUser(UserInfo userInfo) {
        iUserService.save(userInfo);
        return "redirect:findAll.do";
    }

表达式

描述

hasRole([role])

当前用户是否拥有指定角色。

hasAnyRole([role1,role2])

多个角色是一个以逗号进行分隔的字符串。如果当前用户拥有指定角色中的任意一个则返回true。

hasAuthority([auth])

等同于hasRole

hasAnyAuthority([auth1,auth2])

等同于hasAnyRole

Principle

代表当前用户的principle对象

authentication

直接从SecurityContext获取的当前Authentication对象

permitAll

总是返回true,表示允许所有的

denyAll

总是返回false,表示拒绝所有的

isAnonymous()

当前用户是否是一个匿名用户

isRememberMe()

表示当前用户是否是通过Remember-Me自动登录的

isAuthenticated()

表示当前用户是否已经登录认证成功了。

isFullyAuthenticated()

如果当前用户既不是一个匿名用户,同时又不是通过Remember-Me自动登录的,则返回true。

3.页面端标签 控制权限

   在jsp页面中我们可以使用spring security提供的权限标签来进行权限控制      导入坐标

 
  org.springframework.security 
  spring-security-taglibs 
  version 

  jsp 页面 需要导入坐标 

<%@taglib uri="http://www.springframework.org/security/tags" prefix="security"%>

  在spring-security.xml 配置文件   开启支持 jsp页面的 SpringEL表达式 功能     所以以前的 改为 EL表达式的形式

      开启spring EL 表达式
        

        
        
        
    

1. authentication    在jsp页面 获取当前登录用户     principal.username 获取当前用户的 用户名 显示在线

2.  authorize    控制 页面 显示标签的权限

   只有admin  角色的用户 才能  显示 被security:authorize 包裹的 标签

 
    
  • 访问日志
  •  

    你可能感兴趣的:(Spring,security,框架)