Spring Security的使用(訪問許可權控制)
阿新 • • 發佈:2018-11-01
訪問許可權控制
粗粒度:對一個功能的訪問進行控制
細粒度:對該功能下的資料顯示進行控制
注意:許可權控制,需要在spring-mvc.xml中配置,否則會導致失效
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
<!---------------------------------方法/類許可權控制------------------------------------->
jsr-250許可權控制的使用:
第一步:匯入依賴
<dependency >
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>
第二步:編寫spring-security.xml,開啟jsr-250註解的使用
<security:global-method-security jsr250-annotations="enabled"/>
第三步:在需要許可權控制的類或方法上使用@RolesAllowed("ADMIN"),來控制訪問所需要的角色,可以省略"ROLE_",開啟表示式的使用, @RolesAlloewd("ADMIN")依然這麼寫
secured許可權控制的使用:
第一步:編寫spring-security.xml,開啟secured註解的使用
< security:global-mathod-security secured-annotations="enable"/>
第三步:在需要許可權控制的類或方法上使用@Secured("ROLE_ADMIN"),來控制訪問所需要的角色,不能省略"ROLE_",
開啟表示式的使用, @Secured("ROLE_ADMIN")依然這麼寫
SPEL表示式許可權控制的使用:
在spring-security.xml中開啟使用SPEL表示式,
<security:http auto-config="true" use-expressions="true"></security:http >
開啟SPEL表示式後,需要修改:
<security:intercept pattern="/**" access="hasRole('ROLE_ADMIN','ROLE_USER')">
<security:global-method-security pre-post-annotations="enabled"></security:global-method-security>
@PreAuthorize("authentication.principal.username == 'tom'") //當前使用者為tom才可以訪問
@PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_USER')") //admin或者user角色都可以訪問
@PreAuthorize("hasRole('ROLE_ADMIN')") //admin角色可以訪問
<!---------------------------------頁面許可權控制------------------------------------->
第一步:匯入依賴
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>5.0.1.RELEASE</version>
</dependency>
第二步:在JSP頁面引入標籤庫
<%@taglib prefix="security" uri="http://www.springframework.org/security/tags" %>
1.獲取當前認證使用者的資訊
<h1>使用者名稱:<security:authentication property="principal.username"/></h1>
2.控制選單欄是否顯示
<security:authorize access="hasRole('ROLE_ADMIN')">
....(選單欄)
</security:authorize>
@Param註解
由於#{}中賦值時,如果需要賦值的資料型別是普通資料型別,那麼#{}可以任意寫
@Insert("insert into user values(#{username},#{password})")
public void save(@Param("username"))String username,@Param("password")String password){ ... }
此時,由於賦值不明確,會導致500,可以使用@Param註解解決引數注入問題
手動指定錯誤狀態碼的跳轉頁面
配置wem.xml
<error-page>
<error-code>403</error-code>
<location>/403.jsp</location>
</error-page>
400:通常發生在spring自動封裝前端資料異常,一般都是日期轉換異常
403:通常是在使用了spring security框架後,發生的許可權不足的問題