真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Springsecurity中怎么利用數(shù)據(jù)庫實(shí)現(xiàn)賬戶密碼認(rèn)證

Spring security中怎么利用數(shù)據(jù)庫實(shí)現(xiàn)賬戶密碼認(rèn)證,很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括豐滿網(wǎng)站建設(shè)、豐滿網(wǎng)站制作、豐滿網(wǎng)頁制作以及豐滿網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,豐滿網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到豐滿省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

一、原理分析

前臺的登錄請求發(fā)送到后端后會由spring security進(jìn)行攔截,即controller層由框架自己提供。這樣用戶名和密碼的認(rèn)證就需要在service層完成,所以框架需要在service層獲取到我們自己的數(shù)據(jù)庫賬號信息。

spring security 提供了一個(gè)接口 UserDetailsService 來讓用戶提供賬號和密碼,其內(nèi)容如下

public interface UserDetailsService {
  UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
}

用戶實(shí)現(xiàn)這個(gè)接口中的loadUserByUsername方法,通過數(shù)據(jù)庫中查詢的賬號和密碼構(gòu)造一個(gè)UserDetails對象返回給spring security,然后框架自己完成認(rèn)證操作。

其中UserDetails也是一個(gè)接口,spring security用它來封裝當(dāng)前進(jìn)行認(rèn)證的用戶信息

public interface UserDetails extends Serializable {
  Collection getAuthorities();
  String getPassword();
  String getUsername();
  boolean isAccountNonExpired();
  boolean isAccountNonLocked();
  boolean isCredentialsNonExpired();
  boolean isEnabled();
}

spring security 自己提供了一個(gè)實(shí)現(xiàn)類我們可以直接使用,以下是User中的部分代碼

public class User implements UserDetails, CredentialsContainer {
private String password;
private final String username;
private final Set authorities;
private final boolean accountNonExpired; //帳戶是否過期
private final boolean accountNonLocked; //帳戶是否鎖定
private final boolean credentialsNonExpired; //認(rèn)證是否過期
private final boolean enabled; //帳戶是否可用
}

所以,使用數(shù)據(jù)庫完成認(rèn)證的關(guān)鍵就是實(shí)現(xiàn)UserDetailsService接口,并在loadUserByUsername方法中封裝一個(gè)框架需要的UserDetails對象,即User對象返回給框架,由框架完成后續(xù)的認(rèn)證操作。

同時(shí)需要在spring security的配置文件中指定要用來認(rèn)證的userService 的bean

二、代碼實(shí)現(xiàn)

1.新建一個(gè)javaWeb工程

新建一個(gè)javaweb工程,導(dǎo)入相關(guān)依賴,pom文件的內(nèi)容如下

pom文件




 4.0.0

 com.lyy
 spring_security_1
 1.0-SNAPSHOT
 war

 spring_security_1 Maven Webapp
 
 http://www.example.com

 
  UTF-8
  5.0.2.RELEASE
  1.6.6
  1.2.12
  5.1.6
  3.4.5
  5.0.1.RELEASE
 

 
  
   org.aspectj
   aspectjweaver
   1.6.8
  
  
   org.springframework
   spring-aop
   ${spring.version}
  
  
   org.springframework
   spring-context
   ${spring.version}
  
  
   org.springframework
   spring-context-support
   ${spring.version}
  
  
   org.springframework
   spring-web
   ${spring.version}
  
  
   org.springframework
   spring-orm
   ${spring.version}
  
  
   org.springframework
   spring-beans
   ${spring.version}
  
  
   org.springframework
   spring-core
   ${spring.version}
  
  
   org.springframework
   spring-test
   ${spring.version}
  
  
   org.springframework
   spring-webmvc
   ${spring.version}

  
  
   org.springframework
   spring-tx
   ${spring.version}
  
  
   junit
   junit
   4.12
   test
  

  
   javax.servlet
   javax.servlet-api
   3.1.0
   provided
  
  
   javax.servlet.jsp
   jsp-api
   2.0
   provided
  
  
   jstl
   jstl
   1.2
      
  
   log4j
   log4j
   ${log4j.version}
  
  
   org.slf4j
   slf4j-api
   ${slf4j.version}
  
  
   org.slf4j
   slf4j-log4j12
   ${slf4j.version}
      

  
   mysql
   mysql-connector-java
   ${mysql.version}
  

  
   org.mybatis
   mybatis
   ${mybatis.version}
  
  
   org.mybatis
   mybatis-spring
   1.3.0
  
  
   c3p0
   c3p0
   0.9.1.2
   jar
   compile
  
  
   com.github.pagehelper
   pagehelper
   5.1.2
  
  
   org.springframework.security
   spring-security-web
   ${spring.security.version}
  
  
   org.springframework.security
   spring-security-config
   ${spring.security.version}
  
  
   org.springframework.security
   spring-security-core
   ${spring.security.version}
  
  
   org.springframework.security
   spring-security-taglibs
   ${spring.security.version}
  


  
   javax.annotation
   jsr250-api
   1.0
  

  
   com.fasterxml.jackson.core
   jackson-databind
   2.9.7
  

  
   com.fasterxml.jackson.core
   jackson-core
   2.9.7
  
  
   org.projectlombok
   lombok
   1.16.16
  
 

 
  
   
    org.apache.tomcat.maven
     tomcat7-maven-plugin
      2.1
       
        80
        /
        UTF-8
        tomcat7
       
   

  
 

在web.xml中配置spring security的過濾器

web.xml



  spring security 01

  
    contextConfigLocation
    classpath:spring-security.xml,classpath*:applicationContext.xml
  

  
  
    org.springframework.web.context.ContextLoaderListener
  

  
    springSecurityFilterChain
    org.springframework.web.filter.DelegatingFilterProxy
  
  
    springSecurityFilterChain
    /*
  

  
  
    characterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      UTF-8
    
  
  
    characterEncodingFilter
    /*
  

  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  

整合spring和mybatis,spring的配置文件applicationContext.xml

spring配置文件




  
  
  
  

  

  
  
  
    
    
    
    
  

  
  
    
    
  

  
  
    
  

  
  
  
    
  

  

spring security配置文件

spring security的配置文件的內(nèi)容,spring-security.xml




  

  
  
  

  
    
    

    
    
    
    

    
    
  
  
    
    
    
  

在這個(gè)配置文件中要注意的是配置用來認(rèn)證的userService Bean


創(chuàng)建登錄頁面和登錄失敗的頁面login.html,failed.html

2.用戶認(rèn)證的實(shí)現(xiàn)

新建一個(gè)IUserService接口繼承UserDetailsService

package com.lyy.service;
import org.springframework.security.core.userdetails.UserDetailsService;
public interface IUserService extends UserDetailsService {
}

實(shí)現(xiàn)類如下

@Service("userService")
public class UserServiceImpl implements IUserService {

  @Autowired
  private IUserDao userDao;

  public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    UserInfo userInfo = userDao.findByUsername(username);
    User user=new User(userInfo.getUsername(),"{noop}"+userInfo.getPassword(),getRoles());
    return user;
  }
  /*給用戶賦值角色信息*/
  private List getRoles(){
    List list=new ArrayList();
    list.add(new SimpleGrantedAuthority("ROLE_USER"));
    list.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
    return list;
  }
}

其中在loadUserByUsername方法中完成查詢數(shù)據(jù)庫信息,封裝成框架需要的用戶信息。

注意 :

UserInfo是封裝數(shù)據(jù)庫用戶信息的實(shí)體類

getRoles用來給用戶賦角色信息,spring security認(rèn)證時(shí)用戶必須有角色信息,角色信息可以從數(shù)據(jù)庫中查詢,在這里直接在代理中寫固定值來示意。

用戶密碼中拼接的"{noop}"字符串是因?yàn)槲覀儧]有對密碼進(jìn)行加密,所以要告訴框架認(rèn)證密碼時(shí)不需要加密。

3.測試

啟動(dòng)工程,訪問localhost,會跳轉(zhuǎn)到登錄頁面,輸入數(shù)據(jù)庫中存在的賬戶和密碼就會登錄成功并跳轉(zhuǎn)到首頁index.html

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。


網(wǎng)頁題目:Springsecurity中怎么利用數(shù)據(jù)庫實(shí)現(xiàn)賬戶密碼認(rèn)證
轉(zhuǎn)載來于:http://weahome.cn/article/jssphe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部