ssm(Spring + SpringMVC + MybatisPlus)フレームワーク(2)に基づいてSecurity + JWT + xml構成を統合します-データベースを使用してユーザーを認証します

今日の言葉:
前の章の指示に従ってください。アカウントがrootで、パスワードが123456の場合にのみ、正常にログインできます。この方法は非常に実用的ではありません。ユーザーが増えると、すべてを一覧表示することはできません。ユーザー情報。、したがって、データベースを使用してユーザーを認証し、承認する必要があります。

次に、この問題を解決します。
mybatisplusを使用しているので、記述するコードが少なくなります。
最初にEntityパッケージを作成します

特定のプロジェクト構造は表示されません。パッケージディレクトリを確認するだけです。

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;
}

マッパーパッケージ

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> {
    
    
}

サービスインターフェース

package com.alumni_circle.service.security;

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

public interface IUserSecurityService extends UserDetailsService {
    
    
}

サービス実装クラス

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)をセキュリティに挿入しなかったため、今回はエラーが報告される可能性があります。そのため、Beanを構成する必要があります。

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

このようにして、データベースを使用してユーザーを認証および承認できます。
もちろん、データベースにデータテーブルを作成することは不可欠です。
ここに画像の説明を挿入
このデータベース設定は、少しの目的でアクセス許可のリストを追加することもできるため、省略されて書き込まれませんが、UserSecurityServiceImpl.javaに完全に書き込まれます。

注:前回の記事では、titleとmessageの2つの文字列を記述しましたが、ここではtitle、{title}、に変更できますt i t l e {message}を入力し、ページタグにisELIgnored = "false"を追加すると、ログインに成功すると次のように表示されます。
ここに画像の説明を挿入

学習に問題があります、指摘することを歓迎します

おすすめ

転載: blog.csdn.net/weixin_43911969/article/details/107674108