首页 > 编程知识 正文

mvc框架,springboot vue

时间:2023-05-04 00:16:53 阅读:130787 作者:1701

公司的工作需要使用自制的云平台。 虽然我是嵌入式工程师,但是因为人手不足(主要是车站的人去,谁也不会Java ),所以由我来维护。

这次有新的需求,需要进行权限的分类和管理。 因为原来的代码已经好几招了(你好累啊。 我需要在保持原有结构的情况下添加这些功能。 那么,原来的方式已经不能满足需求了。

查阅资料后,决定直接使用用户详细信息服务的形式改造原页面。

我们原始的spring-security.xml包含以下代码:

认证管理器错误凭证=' false '认证认证提供商JDBC-user-servicedata-source-ref=' ' authorities-by-username-query=' selectu.username,r.name as role from sys_user u,sys _ role _ u u u u u u user ur, sys _ role _ role _ r//验证提供程序/验证操作-管理器这里的验证操作-提供程序直接使用jdbc使用数据库

其中使用自定义的用户详细信息服务,而不是直接对数据库执行操作。

authentic ation-manager erase-credentials=' false ' authentic ation-provider user-service-ref=' myuserdetailser服务ailservice als 必须对名为myUserDetailsService的类进行具体设计,但在此之前,必须自定义用户详细信息。

package com.hzmsc.scada.entity; import java.util.Collection; importorg.spring帧. security.core.granted authority; importorg.spring帧. security.core.user details.user details; publicclassuserimplementsuserdetails {/* * * @ title : user * @ author : zza * @ date 33602020/3/9173:05 * @ des cccccc 私有字符串密码; 私有布尔启用; 私密收集? extendsgrantedauthorityauthorities; 公共用户(intid,String username,String password,booleanenabled({super ) ); this.id=id; this.username=username; this.password=password; this.enabled (启用); }公共用户(intid,String username,String password,boolean enabled,Collection? extendsgrantedauthorityauthorities ({ super ); this.id=id; this.username=username; this.password=password; this.enabled (启用);

this.authorities = authorities; } public int getId(){ return this.id; } @Override public Collection<? extends GrantedAuthority> getAuthorities() { return authorities; } @Override public String getPassword() { return password; } @Override public String getUsername() { return username; } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return true; } @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { return enabled; } @Override public String toString() { return "MyUserDetails [id=" + id + ", username=" + username + ", password=" + password + ", enabled=" + enabled + ", authorities=" + authorities + "]"; }}

定义好User类以后我们就可以开始设计myUserDetailsService了。

package com.hzmsc.scada.service;import java.sql.ResultSet;import java.sql.SQLException;import java.util.List;import com.hzmsc.scada.entity.User;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.dao.EmptyResultDataAccessException;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import org.springframework.security.core.GrantedAuthority;import org.springframework.security.core.authority.SimpleGrantedAuthority;import org.springframework.security.core.userdetails.UserDetails;import org.springframework.security.core.userdetails.UserDetailsService;import org.springframework.security.core.userdetails.UsernameNotFoundException;import javax.sql.DataSource;public class MyUserDetailsService implements UserDetailsService { @Autowired public void setDatasource(DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } JdbcTemplate jdbcTemplate; private final String sqlLoadUser; private final String sqlLoadAuthorities; private final RowMapper<User> myUserDetailsRowMapper; private final RowMapper<GrantedAuthority> authorityRowMapper; private static Logger logger = LoggerFactory .getLogger(MyUserDetailsService.class); public MyUserDetailsService(){ super(); sqlLoadUser ="select id,username,password,enabled from sys_user where username=?"; sqlLoadAuthorities = "select r.name as role from sys_user u,sys_role_user ur, sys_role r where u.id=ur.Sys_User_id and r.id = ur.Sys_Role_id and u.username= ? "; myUserDetailsRowMapper = new RowMapper<User>() { @Override public User mapRow(ResultSet rs, int rowNum) throws SQLException { return (new User(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getBoolean(4))); } }; System.out.println(); authorityRowMapper = new RowMapper<GrantedAuthority>() { @Override public GrantedAuthority mapRow(ResultSet rs, int rowNum) throws SQLException { return new SimpleGrantedAuthority(rs.getString(1)); } }; } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { try { System.out.println("++++++++"); User userFromQuery = jdbcTemplate.queryForObject(sqlLoadUser, myUserDetailsRowMapper,username); logger.debug("查询得到用户:{}", userFromQuery); List<GrantedAuthority> authorities = jdbcTemplate.query( sqlLoadAuthorities, authorityRowMapper, username); logger.debug("得到其权限:{}", authorities); return new User(userFromQuery.getId(), userFromQuery.getUsername(), userFromQuery.getPassword(), userFromQuery.isEnabled(), authorities); } catch (EmptyResultDataAccessException e) { logger.debug("查询结果集为空:{}", username); throw new UsernameNotFoundException("用户名或密码不正确"); } }}

注意开始的时候需要添加动态数据源,否则装配的时候会发生故障(-_-||这里被坑死)。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。