今日の言葉:
前の章の指示に従ってください。アカウントが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"を追加すると、ログインに成功すると次のように表示されます。
学習に問題があります、指摘することを歓迎します