D52-ssm(04)Spring security安全框架,认证操作

Spring security的介绍

  • 是spring提供的一个安全框架
  • 通过11个过滤器来实现认证和授权
  • Spring security已经把11个过滤器做成了过滤器链,叫springSecurityFilterChain
  • spring给大家提供好了一个专门用来加载过滤器链的过滤器对象----filter-name 固定写成要加载的过滤器链名字即可。

角色的列表和添加

创建controller

@Controller
@RequestMapping("/role")
public class RoleController {
    @Autowired
    private RoleService roleService;
    @RequestMapping("/findAll")
    public String findAll(Model model){
        List<SysRole> list=roleService.findAll();
        model.addAttribute("list",list);
        return "role-list";
    }

    @RequestMapping("/save")
    public String save(SysRole role){
        roleService.save(role);
        return "redirect:findAll";
    }
}

创建service实现类

@Service
@Transactional
public class RoleServiceImpl implements RoleService {
    @Autowired
    private RoleDao roleDao;
    @Override
    public List<SysRole> findAll() {
        return roleDao.findAll();
    }

    @Override
    public void save(SysRole role) {
        roleDao.save(role);
    }
}  

创建dao

public interface RoleDao {
    @Select("select * from sys_role")
    List<SysRole> findAll();

    @Insert("insert into sys_role (roleName, roleDesc)" +
            "values (#{roleName}, #{roleDesc})")
    void save(SysRole role);

    @Select("select r.* from sys_role r, sys_user_role ur where ur.roleid=r.id and ur.userid=#{uid}")
    public List<SysRole> findByUid(String uid);
}

调整前端页面

ordel-list页面

<li><a
href="${pageContext.request.contextPath}/role/findAll.do">角色管理</a>
</li>

认证操作(经过数据库且加密)

认证

  • <security:http 是springsecurity的基本配置标签
  • auto-config=“true” 表示springsecurity会自动寻找认证页面,如果自己提供,则用自己的
  • use-expressions=“true” 表示使用spring的el表达式来指定对应配置
  • <security:intercept-url 指定哪些路径需要哪些角色才能访问。

pattern="/ **" 表示现在要拦截所有的请求

  • access=“hasRole(‘ROLE_USER’)” 表示任何资源都必须具有ROLE_USER角色才能访问
    • 此时ROLE_USER角色可以称为基本角色。

spring-security.xml

<!--springsecurity的主配置文件-->
    <security:http auto-config="true" use-expressions="true">
        <!--指定基本角色-->
        <security:intercept-url pattern="/**" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')"/>
        <!--认证相关配置-->
        <!--
           login-page="" 自定义认证页面的路径
            login-processing-url="" 认证处理器路径
        default-target-url="" 认证成功后跳转的页面
        authentication-failure-url="" 认证失败后跳转的页面
        -->
        <security:form-login login-page="/login.jsp"
                             login-processing-url="/login"
                             default-target-url="/index.jsp"
                             authentication-failure-url="/failer.jsp"/>

        <!--退出登录相关配置-->
        <!--
        invalidate-session="true" 表示退出登录后情况session
        logout-url="/logout" 指定退出登录的处理器地址
        logout-success-url="/login.jsp" 退出成功后跳转的路径
        -->
        <security:logout logout-url="/logout"
                         logout-success-url="/login.jsp"
                         invalidate-session="true"/>
        <!--放开csrf拦截-->
        <!--
            csrf是一种网络攻击技术,springsecurity默认只要不是框架内部的请求
            全部都是csrf攻击,所以我们只要使用springsecurity,csrf就一定要关闭。
        -->
        <security:csrf disabled="true"/>
        <!--处理AccessDeniedException异常-->
        <security:access-denied-handler error-page="/403.jsp"/>

    </security:http>

Md5加密

  • 浅层原理: 原文与密文绝对固定的一对一的键值对。
    例如:

  • 原文:123

  • 密文:202cb962ac59075b964b07152d234b70
    两者之间永远固定不变。

  • 弊端: 密文容易被破解。

Springsecurity的加盐加密

  • 盐: 首位调换,加上用户名

认证方式:

  • 先根据用户输入的用户名进行查询,没有查到,认证失败。
  • 查到了,在拿用户填写的密码与密文调用matches()方法, 来确定是否是同一个密码。

代码实现

在spring的ioc容器中放入一个加盐加密的对象

方式一

spring-security.xml

<!--加盐加密对象-->
    <bean id="passwordEncoder"
          class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
    </bean>
<!--认证信息-->
    <!--
    在内存中放置两个临时用户
     一个用户名是user密码也是user,角色为ROLE_USER
    一个用户名是admin密码也是admin,角色为ROLE_ADMIN
    springsecurity默认就是加密认证,如果要不加密认证
    需要加上{noop}
    -->
    <security:authentication-manager>
        <security:authentication-provider user-service-ref="userServuceImpl">
               <!-- <security:user name="user" password="{noop}user" authorities="ROLE_USER"/>
                <security:user name="admin" password="{noop}admin" authorities="ROLE_ADMIN"/>-->
        </security:authentication-provider>
    </security:authentication-manager>
方式二

在这里插入图片描述

applicationContext.xml 中添加

<!--引入springsecurity配置文件-->
    <import resource="classpath:spring-security.xml"/>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值