一.使用自定義登錄頁面
1.首先關閉 登錄頁面 , 登錄錯誤后跳轉頁面, 登錄成功后跳轉頁面 的攔截
<!--不攔截靜態資源-->
<security:http pattern="/css/**" security="none"></security:http>
<security:http pattern="/img/**" security="none"></security:http>
<security:http pattern="/plugins/**" security="none"></security:http>
<!--不攔截登錄 不攔截 error-->
<security:http pattern="/login.jsp" security="none"/>
<security:http pattern="/file.jsp" security="none"/>
<security:http pattern="/index.ico" security="none"/>
2.自定義登錄頁面
<security:http use-expressions="false"> <security:intercept-url pattern="/**" access="ROLE_USER"/> <!--開啟表單登錄 login-page="" 登錄頁面
login-processing-url="/log" 登錄提交頁面路徑,默認login default-target-url="" 登錄成功頁面 authentication-failure-url="" 登錄失敗頁面 --> <security:form-login login-page="/login.jsp" login-processing-url="/log" default-target-url="/index.jsp" authentication-failure-url="/file.jsp" /> <!--關閉跨越請求 如果沒有關閉會報403錯誤--> <security:csrf disabled="true"/>
</security:http>
二. 從數據庫查詢用戶登錄
1.修改spring-security配置
<!-- 配置認證登錄信息 從數據庫讀取賬戶-->
<security:authentication-manager>
<!--提供服務類 去數據庫查詢賬戶密碼-->
<security:authentication-provider user-service-ref="membersServiceImpl">
</security:authentication-provider>
</security:authentication-manager>
<security:authentication-manager>
<!--提供服務類 去數據庫查詢賬戶密碼-->
<security:authentication-provider user-service-ref="membersServiceImpl">
</security:authentication-provider>
</security:authentication-manager>
2.創建pojo dao service層
注:service接口要繼承UserDetailsService
public class MembersServiceImpl implements MembersService { @Autowired MembersDao membersDao; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { //根據用戶名獲取對象
Members members = membersDao.findByName(username); if (members!=null){
//創建角色集合對象 Collection<GrantedAuthority> authorities = new ArrayList<>();
GrantedAuthority grantedAuthority = new SimpleGrantedAuthority("ROLE_USER"); authorities.add(grantedAuthority); User user = new User(members.getUserName(), "{noop}"+members.getPassword(), authorities); return user; } return null; } }
注:順序不能錯,先關閉要頁面的攔截,再定義頁面,否則無法運行