spring Security的自定义用户认证
首先我需要在xml文件中声明.我要进行自定义用户的认证类,也就是我要自己从数据库中进行查询
<http pattern="/*.html" security="none"/>
    <http pattern="/css/**" security="none"/>
    <http pattern="/img/**" security="none"/>
    <http pattern="/js/**" security="none"/>
    <http pattern="/plugins/**" security="none"/>
    <http pattern="/seller/add.do" security="none"/>
    <!-- use-expressions:设置是否启动SpEL表达式,默认值是true。 -->
    <http use-expressions="false">
        <!--
            配置SpringSecurity的拦截路径(拦截规则)
            * pattern:配置拦截规则。   /* 代表的是根路径下的所有资源(不包含子路径) /**代表的是根路径下所有的资源(包含子路径)
            * access:设置角色  角色命名 ROLE_角色名称  如:  ROLE_USER
        -->
        <intercept-url pattern="/**" access="ROLE_SELLER"/>
        <!--
        开启表单验证
            username-parameter="username"
            password-parameter="password"
            login-page            :登录页面名称  以  / 开始
            default-target-url    :登录成功后跳转的页面
            login-processing-url:提交的路径的设置 默认值"/login" 可以修改
        -->
        <form-login login-page="/shoplogin.html" default-target-url="/admin/index.html" always-use-default-target="true" authentication-failure-url="/shoplogin.html"/>
        <!-- 不使用csrf的校验 -->
        <csrf disabled="true"/>
        <!-- 配置框架页面不拦截 -->
        <headers>
            <frame-options policy="SAMEORIGIN"/>
        </headers>
        <!-- 注销的配置 -->
        <logout logout-url="/logout" logout-success-url="/shoplogin.html" />
    </http>
    <!-- 配置认证管理器 -->
    <authentication-manager>
        <!-- 认证的提供者 -->
        <authentication-provider user-service-ref="userDetailService">
            <password-encoder ref="passwordEncoder"></password-encoder>
        </authentication-provider>
    </authentication-manager>
<!-- 配置自定义的认证类 -->
    <beans:bean id="userDetailService" class="com.qingmu2.core.service.UserDetailServiceImpl">
        <beans:property name="sellerService" ref="sellerService"></beans:property>
    </beans:bean>
<!--加密时候使用的算法是BCryptPasswordEncoder-->
    <beans:bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
配置完自定义的文件以后,在需要自定义认证类的模块中实现
UserDetailsService

package com.qingmu2.core.service; import com.alibaba.dubbo.config.annotation.Reference; import com.qingmu2.core.pojo.seller.Seller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; /** * 自定义的认证类 * @Auther:qingmu * @Description:脚踏实地,只为出人头地 * @Date:Created in 8:33 2019/5/31 */ public class UserDetailServiceImpl implements UserDetailsService { private SellerService sellerService; public UserDetailServiceImpl() { } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { Seller seller = sellerService.findOne(username); if(null!=seller){ //判断一次商家是否被审核通过. if("1".equals(seller.getStatus())){ //创建一个集合,用来存储权限 HashSet<GrantedAuthority> authorities = new HashSet<>(); authorities.add(new SimpleGrantedAuthority("ROLE_SELLER")); //将这个用户的信息返回给认证类 return new User(username,seller.getPassword(),authorities); } } //没有这个用户,则返回null return null; } public UserDetailServiceImpl(SellerService sellerService) { this.sellerService = sellerService; } public SellerService getSellerService() { return sellerService; } public void setSellerService(SellerService sellerService) { this.sellerService = sellerService; } }
本文来自博客园,作者:King-DA,转载请注明原文链接:https://www.cnblogs.com/qingmuchuanqi48/p/10972116.html
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号