<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 具有保護切入點的 Spring 方法安全性 > 原文: [https://howtodoinjava.com/spring-security/xml-config-based-method-level-spring-security-using-protect-pointcut/](https://howtodoinjava.com/spring-security/xml-config-based-method-level-spring-security-using-protect-pointcut/) 在方法級別安全性的先前示例中,我們使用`@PreAuthorize`注解添加了安全性。 注解也是在任何方法上增加安全性的好方法和快速方法。 但是有一個問題,它將您的應用程序代碼緊緊地耦合到 Spring 上。 至少在理論上就[**最佳做法**](https://howtodoinjava.com/java-best-practices/)而言,這都是不推薦的。 推薦的方法是將所有此類安全性定義添加到 xml 配置文件中。 這樣,您始終可以更改實現而無需觸碰源代碼。 ## 總覽 在此示例中,我使用了典型的員工管理屏幕。 有兩個基本操作,`ADD`和`DELETE`。 1. 添加要求經過身份驗證的用戶具有`"ROLE_USER"`或`"ROLE_ADMIN"`。 2. 刪除受到更多保護,并且需要管理員訪問權限,即僅允許`ROLE_ADMIN`刪除用戶。 我在應用程序中有兩個用戶,即`admin`和`lokesh`。 `admin`用戶同時具有“ `ROLE_USER`”和“ `ROLE_ADMIN`”角色,但另一個用戶`lokesh`僅具有“ `ROLE_USER`”訪問權限。 `applicationContext.xml` ```java <user-service> <user name="lokesh" password="password" authorities="ROLE_USER" /> <user name="admin" password="password" authorities="ROLE_USER,ROLE_ADMIN" /> </user-service> ``` > 上面的安全配置將允許兩個用戶都添加用戶,但是只有`admin`才能夠刪除用戶。 讓我們看一下示例應用程序中的主要功能點。 ## 使用保護切入點的基于 XML 的 Spring Security 完整的 XML 配置如下所示: `applicationContext.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.3.xsd"> <global-method-security> <protect-pointcut expression="execution(* com.howtodoinjava.service.*Impl.add*(..))" access="ROLE_USER"/> <protect-pointcut expression="execution(* com.howtodoinjava.service.*Impl.delete*(..))" access="ROLE_ADMIN"/> </global-method-security> <http auto-config="false" use-expressions="true"> <intercept-url pattern="/login" access="permitAll" /> <intercept-url pattern="/logout" access="permitAll" /> <intercept-url pattern="/accessdenied" access="permitAll" /> <intercept-url pattern="/**" access="hasRole('ROLE_USER')" /> <form-login login-page="/login" default-target-url="/list" authentication-failure-url="/accessdenied" /> <logout logout-success-url="/logout" /> </http> <authentication-manager alias="authenticationManager"> <authentication-provider> <user-service> <user name="lokesh" password="password" authorities="ROLE_USER" /> <user name="admin" password="password" authorities="ROLE_USER,ROLE_ADMIN" /> </user-service> </authentication-provider> </authentication-manager> <beans:bean id="employeeDAO" class="com.howtodoinjava.dao.EmployeeDaoImpl" /> <beans:bean id="employeeManager" class="com.howtodoinjava.service.EmployeeManagerImpl" /> </beans:beans> ``` ## 應用安全性的管理器類 `EmployeeManagerImpl.java` ```java package com.howtodoinjava.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.howtodoinjava.dao.EmployeeDAO; import com.howtodoinjava.entity.EmployeeEntity; @Service public class EmployeeManagerImpl implements EmployeeManager { @Autowired private EmployeeDAO employeeDAO; @Override @Transactional public void addEmployee(EmployeeEntity employee) { employeeDAO.addEmployee(employee); } @Override @Transactional public List<EmployeeEntity> getAllEmployees() { return employeeDAO.getAllEmployees(); } @Override @Transactional public void deleteEmployee(Integer employeeId) { employeeDAO.deleteEmployee(employeeId); } public void setEmployeeDAO(EmployeeDAO employeeDAO) { this.employeeDAO = employeeDAO; } } ``` 我跳過了其余代碼,因為它與以前的使用注解的[安全示例](https://howtodoinjava.com/spring/spring-security/spring-3-method-level-security-example-using-preauthorize-and-secured/)完全相同。 另外,如果需要引用任何內容,則可以下載源代碼。 ## 測試應用 1)使用用戶`"lokesh"`登錄 ![login-with-user-lokesh](https://img.kancloud.cn/29/dc/29dcac205d3182532fd819e4dccf0155_485x237.jpg) 2)將員工添加到列表中 ![lokesh-add-user-success-1](https://img.kancloud.cn/cc/db/ccdb49016f6e0e4a6351a993de92c8c3_499x410.jpg) 3)用戶添加成功 ![lokesh-add-user-success-2](https://img.kancloud.cn/45/2d/452d502395295a1cf744c1da824db4d4_477x388.jpg) 4)嘗試刪除員工。 訪問被拒絕。 ![lokesh-delete-user-failure](https://img.kancloud.cn/f6/1c/f61cc78fc657817117772193c6190770_485x264.jpg) 5)用管理員用戶登錄 ![login-with-user-admin](https://img.kancloud.cn/54/11/5411ed07673e94f8b9fce7f1fc849af1_465x246.jpg) 6)將員工添加到列表中 ![admin-add-user-success-1](https://img.kancloud.cn/ac/59/ac59299961a5ddd3a1387942ea83b698_501x393.jpg) 7)用戶添加成功 ![admin-add-user-success-2](https://img.kancloud.cn/02/a4/02a4bd388455563e95ec48ba13dee385_498x460.jpg) 8)嘗試刪除員工。 員工已刪除。 ![admin-delete-user-success-1](https://img.kancloud.cn/41/b2/41b26eb9e33748c1351b11ea4c2772b5_506x406.jpg) 9)嘗試刪除其他員工。 員工已刪除。 ![admin-delete-user-success-2](https://img.kancloud.cn/4e/84/4e84648fe1aa47e431b6d82ba16021cb_505x407.jpg) ## 源代碼下載 [**下載源碼**](https://drive.google.com/file/d/0B7yo2HclmjI4M0hha2JHWXdHOTQ/edit?usp=sharing) **學習愉快!**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看