1. 程式人生 > >Spring Security的使用(訪問許可權控制)

Spring Security的使用(訪問許可權控制)

訪問許可權控制
粗粒度:對一個功能的訪問進行控制
細粒度:對該功能下的資料顯示進行控制

注意:許可權控制,需要在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框架後,發生的許可權不足的問題