基于ssm(Spring+SpringMVC+MybatisPlus)框架整合Security+JWT+xml配置(二)——使用数据库验证用户

今日言语:
按照上一章的来做,会发现只有当账号为root,密码为123456,才能登陆成功,这种方式很不实用,一旦我们的用户增加,我们不可能把所有用户信息都列出来,所以我们需要采用数据库来验证用户,并授权

接下来我们来解决这个问题。
本人使用的是mybatisplus,所以写起来代码比较少
先建立Entity包

具体项目结构就不展示了,我们可以看package的目录就行了

package com.alumni_circle.entity.security;

import lombok.Data;

/**
 * @author 龙小虬
 * @since 2020-07-29 13:40
 */
@Data
public class UserSecurity {

    private String username;

    private String password;
}

Mapper包

package com.alumni_circle.mapper.security;

import com.alumni_circle.entity.security.UserSecurity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface UserSecurityMapper extends BaseMapper<UserSecurity> {
}

Service接口

package com.alumni_circle.service.security;

import org.springframework.security.core.userdetails.UserDetailsService;

public interface IUserSecurityService extends UserDetailsService {
}

service实现类

package com.alumni_circle.service.security.impl;

import com.alumni_circle.entity.security.UserSecurity;
import com.alumni_circle.mapper.security.UserSecurityMapper;
import com.alumni_circle.service.security.IUserSecurityService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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 java.util.ArrayList;
import java.util.List;

/**
 * @author 龙小虬
 * @since 2020-07-29 13:42
 */

@Service
public class UserSecurityServiceImpl implements IUserSecurityService {

    @Autowired
    UserSecurityMapper userSecurityMapper;

    @Override
    public UserDetails loadUserByUsername(String name) throws UsernameNotFoundException {
        QueryWrapper<UserSecurity> queryWrapper = new QueryWrapper<UserSecurity>();
        queryWrapper.eq("username",name);
        UserSecurity userSecurity = userSecurityMapper.selectOne(queryWrapper);
        List<SimpleGrantedAuthority> authorities = new ArrayList<>();
        authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
        System.out.println(name);
        if(userSecurity!=null){
            return new User(userSecurity.getUsername(),userSecurity.getPassword(),authorities);
        }
        System.out.println(name);
        return null;
    }
}

web包

package com.alumni_circle.controller.security;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

/**
 * @author 龙小虬
 * @since 2020-07-28 18:12
 */
@Controller
public class SecurityController {

    @RequestMapping(value = "/admin**", method = RequestMethod.GET)
    public ModelAndView adminPage() {

        ModelAndView model = new ModelAndView();
        model.addObject("title", "Spring Security Hello World");
        model.addObject("message", "This is protected page!");
        model.setViewName("admin");
        System.out.println(model.toString());
        return model;

    }

}

基础工程就已经完成了,接下来我们更改一下spring-security.xml这个配置
在这里插入图片描述
我们上一篇文章使用的是注释掉的部分,现在需要在security:authentication-provider标签中加入

user-service-ref="userSecurityService"

但是这个时候可能汇报错,因为我们并没有把userSecurityService(UserSecurityServiceImpl)注入到security中,所以需要配置bean

    <bean id="userSecurityService" class="com.alumni_circle.service.security.impl.UserSecurityServiceImpl"/>

这样我们就可以使用数据库来对用户进行验证和授权了。
当然还少不了我们在数据库中创建数据表。
在这里插入图片描述
这个数据库设置也可以添加权限列表,为了一点点来,所以就省略没写,而是在UserSecurityServiceImpl.java写死了。

注:上一篇文章中我们写了title,message这两个字符串,在这里我们就可以更改为 t i t l e , {title}, title,{message}了,然后在page标签中加入isELIgnored=“false”,在登录成功后就会显示成这样
在这里插入图片描述

学习上有问题,欢迎指出

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙小虬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值