• SpringSecurity使用步骤


    一、导入jar包(使用maven构建项目导入其坐标)

    <dependency>
         <groupId>org.springframework.security</groupId>
         <artifactId>spring-security-web</artifactId>
         <version>${spring.security.version}</version>
    </dependency>
    <dependency>
         <groupId>org.springframework.security</groupId>
         <artifactId>spring-security-config</artifactId>
         <version>${spring.security.version}</version>
    </dependency>
    <dependency>
         <groupId>org.springframework.security</groupId>
         <artifactId>spring-security-core</artifactId>
         <version>${spring.security.version}</version>
    </dependency>
    <dependency>
         <groupId>org.springframework.security</groupId>
         <artifactId>spring-security-taglibs</artifactId>
         <version>${spring.security.version}</version>
    </dependency>

    二、配置web.xml文件

    <!-- 配置加载类路径的配置文件 -->
    <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:applicationContext.xml,classpath:spring-security.xml</param-value>
    </context-param>

    配置springSecurityFilterChain

    <filter>
            <filter-name>springSecurityFilterChain</filter-name>
            <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
            <filter-name>springSecurityFilterChain</filter-name>
            <url-pattern>/*</url-pattern>
    </filter-mapping>

    三、创建spring-security.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:security="http://www.springframework.org/schema/security"
           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.xsd
        http://www.springframework.org/schema/security
        http://www.springframework.org/schema/security/spring-security.xsd">
    
        <!-- 配置不拦截的资源 -->
        <security:http pattern="/login.jsp" security="none"/>
        <security:http pattern="/failer.jsp" security="none"/>
        <security:http pattern="/css/**" security="none"/>
        <security:http pattern="/img/**" security="none"/>
        <security:http pattern="/plugins/**" security="none"/>
    
        <!--
            配置具体的规则
            auto-config="true"    不用自己编写登录的页面,框架提供默认登录页面
            use-expressions="false"    是否使用SPEL表达式(没学习过)
        -->
        <security:http auto-config="true" use-expressions="false">
            <!-- 配置具体的拦截的规则 pattern="请求路径的规则" access="访问系统的人,必须有ROLE_USER的角色" -->
            <security:intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN"/>
    
            <!-- 定义跳转的具体的页面 -->
            <security:form-login
                    login-page="/login.jsp"
                    login-processing-url="/login.do"
                    default-target-url="/index.jsp"
                    authentication-failure-url="/failer.jsp"
                    authentication-success-forward-url="/pages/main.jsp"
            />
    
            <!-- 关闭跨域请求 -->
            <security:csrf disabled="true"/>
    
            <!-- 退出 -->
            <security:logout invalidate-session="true" logout-url="/logout.do" logout-success-url="/login.jsp"/>
    
        </security:http>
    
        <!-- 切换成数据库中的用户名和密码 -->
        <security:authentication-manager>
            <security:authentication-provider user-service-ref="userService">
                <!-- 配置加密的方式 -->
                <!--<security:password-encoder ref="passwordEncoder"/>-->
            </security:authentication-provider>
        </security:authentication-manager>
    
        <!--&lt;!&ndash; 配置加密类 &ndash;&gt;-->
        <bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
    
        <!-- 提供了入门的方式,在内存中存入用户名和密码
        <security:authentication-manager>
            <security:authentication-provider>
                <security:user-service>
                    <security:user name="admin" password="{noop}admin" authorities="ROLE_USER"/>
                </security:user-service>
            </security:authentication-provider>
        </security:authentication-manager>
        -->
    
    </beans>

    此时该配置文件就相当于控制器。

    四、创建service实现类,返回UserDetails对象

    说明:在service实体类中调用dao方法,根据用户名查询数据库并返回查询结果,service将结果返回给springsecurity进行处理,根据用户名密码是否正确,身份是否符合,用户是否活跃最终判断用户的登陆成功与否。

    package sun.ssm.service.Impl;
    
    import org.springframework.beans.factory.annotation.Autowired;
    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.UsernameNotFoundException;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    import sun.ssm.dao.UserDao;
    import sun.ssm.domain.Role;
    import sun.ssm.domain.UserInfo;
    import sun.ssm.service.UserService;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @Classname UserServiceImpl
     * @Description TODO
     * @Date 2020/10/30 13:38
     * @Created by Administrator
     */
    @Service("userService")
    @Transactional
    public class UserServiceImpl implements UserService {
        @Autowired
        private UserDao userDao;
    
        @Override
        public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
            UserInfo userinfo = userDao.findByUsername(username);
            User user=new User(userinfo.getUsername(),"{noop}"+userinfo.getPassword(),userinfo.getStatus()==0?false:true,true,true,true,getAuthority(userinfo.getRoles()));
            return user;
        }
    
        public List<SimpleGrantedAuthority> getAuthority(List<Role> roles){
            List<SimpleGrantedAuthority> list=new ArrayList<>();
            for(Role role:roles){
                list.add(new SimpleGrantedAuthority("ROLE_"+role.getRoleName()));
            }
            return list;
        }
    }
  • 相关阅读:
    生涯路
    事件与window的基本操作
    js操作
    c# 函数
    布局页面CSS
    网页填写的基本操作
    框架集
    网页的基本操作1
    存储与触发器
    常用的函数
  • 原文地址:https://www.cnblogs.com/sun-10387834/p/13902759.html
Copyright © 2020-2023  润新知