当前位置: 首页 > news >正文

建网站跟建网店的区别软件开发工具是什么意思

建网站跟建网店的区别,软件开发工具是什么意思,手工制作教程视频教程,17网站一起做网店档口出租SpringSecurity入门 什么是SpringSecurity Spring Security 的前身是 Acegi Security #xff0c;是 Spring 项目组中用来提供安全认证服务的框架。 (https://projects.spring.io/spring-security/) Spring Security 为基于J2EE企业应用软件提供了全面安全服务。特别 是使…SpringSecurity入门 什么是SpringSecurity Spring Security 的前身是 Acegi Security 是 Spring 项目组中用来提供安全认证服务的框架。 (https://projects.spring.io/spring-security/) Spring Security 为基于J2EE企业应用软件提供了全面安全服务。特别 是使用领先的J2EE解决方案-Spring框架开发的企业软件项目。人们使用Spring Security有很多种原因不过通常吸 引他们的是在J2EE Servlet规范或EJB规范中找不到典型企业应用场景的解决方案。特别要指出的是他们不能再 WAR 或 EAR 级别进行移植。这样如果你更换服务器环境就要在新的目标环境进行大量的工作对你的应用 系统进行重新配置安全。使用Spring Security 解决了这些问题也为你提供很多有用的完全可以指定的其他安 全特性。安全包括两个主要操作。 “认证”是为用户建立一个他所声明的主体。主题一般式指用户设备或可以在你系统中执行动作的其他系 统。简单来说系统认为用户是否能登录 “授权”指的是一个用户能否在你的应用中执行某个操作在到达授权判断之前身份的主题已经由身份验证 过程建立了。简单来说系统判断用户是否有权限去做某些事情 这些概念是通用的不是Spring Security特有的。在身份验证层面Spring Security广泛支持各种身份验证模式 这些验证模型绝大多数都由第三方提供或则正在开发的有关标准机构提供的例如 Internet Engineering Task Force.作为补充Spring Security 也提供了自己的一套验证功能。 Spring Security 目前支持认证一体化如下认证技术 HTTP BASIC authentication headers (一个基于IEFT RFC 的 标准) HTTP Digest authentication headers (一个基于IEFT RFC 的标准) HTTP X.509 client certi?cate exchange (一个基于IEFT RFC 的标准) LDAP (一个非常常见的跨平台认证需要做法特别是在大环境) Form-based authentication (提供简单用户接口的需求) OpenID authentication Computer Associates Siteminder JA-SIG Central Authentication Service (CAS这是一个流行的开源单点登录系统) Transparent authentication context propagation for Remote Method Invocation and HttpInvoker (一个Spring远程调用协议) 用户登录认证 表结构分析与创建 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GnUk2Dvg-1692278828416)(day03_springboot综合案例.assets/image-20210516220645141.png)] -- 用户表 CREATE TABLE users(id VARCHAR(32) PRIMARY KEY,email VARCHAR(50) UNIQUE NOT NULL,username VARCHAR(50),PASSWORD VARCHAR(100),phoneNum VARCHAR(20),STATUS INT );-- 角色表 CREATE TABLE role(id VARCHAR(32) PRIMARY KEY,roleName VARCHAR(50) ,roleDesc VARCHAR(50) );-- 用户角色关联表 CREATE TABLE users_role(userId VARCHAR(32),roleId VARCHAR(32),PRIMARY KEY(userId,roleId),FOREIGN KEY (userId) REFERENCES users(id),FOREIGN KEY (roleId) REFERENCES role(id) );-- 资源权限表 CREATE TABLE permission(id VARCHAR(32) PRIMARY KEY,permissionName VARCHAR(50) ,url VARCHAR(50) );-- 角色权限关联表 CREATE TABLE role_permission(permissionId VARCHAR(32),roleId VARCHAR(32),PRIMARY KEY(permissionId,roleId),FOREIGN KEY (permissionId) REFERENCES permission(id),FOREIGN KEY (roleId) REFERENCES role(id) );创建类 创建UserInfo Data public class UserInfo {private String id;private String username;private String email;private String password;private String phoneNum;private int status;private String statusStr;private ListRole roles; }创建Role Data public class Role {private String id;private String roleName;private String roleDesc;private ListPermission permissions;private ListUserInfo users; }创建Permission Data public class Permission {private String id;private String permissionName;private String url;private ListRole roles; }Spring Security数据库认证底层 在Spring Security中如果想要使用数据进行认证操作有很多种操作方式这里我们介绍使用UserDetails、 UserDetailsService来完成操作。 UserDetails public interface UserDetails extends Serializable {Collection? extends GrantedAuthority getAuthorities();String getPassword();String getUsername();boolean isAccountNonExpired();boolean isAccountNonLocked();boolean isCredentialsNonExpired();boolean isEnabled(); }UserDatails是一个接口我们可以认为UserDetails作用是于封装当前进行认证的用户信息但由于其是一个 接口所以我们可以对其进行实现也可以使用Spring Security提供的一个UserDetails的实现类User来完成 操作CtrlAltB 查找接口实现类 以下是User类的部分代码 public class User implements UserDetails, CredentialsContainer {private String password;private final String username;private final SetGrantedAuthority authorities;private final boolean accountNonExpired; //帐户是否过期private final boolean accountNonLocked; //帐户是否锁定private final boolean credentialsNonExpired; //认证是否过期 private final boolean enabled; //帐户是否可用 UserDetailsService public interface UserDetailsService {UserDetails loadUserByUsername(String username) throws UsernameNotFoundException; }上面将UserDetails与UserDetailsService做了一个简单的介绍那么我们具体如何完成Spring Security的数据库认 证操作我们通过用户管理中用户登录来完成Spring Security的认证操作。 用户登录流程分析 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KG7Pu1wO-1692278828417)(assets/image-20201012180237425.png)] 登录认证 添加依赖 !--SpringSecurity--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-security/artifactId/dependency Spring Security配置类 package cn.yanqi.config;import cn.yanqi.service.UserService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import javax.annotation.Resource;// EnableGlobalMethodSecurity(jsr250Enabled true) //开启jsr250注解 // EnableGlobalMethodSecurity(securedEnabled true) //开启secured注解 // EnableGlobalMethodSecurity(prePostEnabled true) //开启表达式注解 EnableWebSecurity Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter {Resourceprivate UserService userService;Overrideprotected void configure(HttpSecurity http) throws Exception {//自定义表单登录页面http.formLogin()//指定登录页面.loginPage(/to/login)//指定登录请求.loginProcessingUrl(/login).usernameParameter(username).passwordParameter(password).successForwardUrl(/to/index).failureUrl(/to/failer).and().logout().logoutUrl(/logout).logoutSuccessUrl(/to/login).invalidateHttpSession(true) //是否清除session.and()//权限配置.authorizeRequests()//放行 登录页面.antMatchers(/to/login,/to/failer).permitAll()//放开 静态资源.antMatchers(/css/**,/img/**,/js/**,/plugins/**).permitAll()//其他 资源需要登录后访问.anyRequest().authenticated().and()//禁用csrf.csrf().disable();//没有权限http.exceptionHandling().accessDeniedPage(/to/403);}//认证的数据需要使用自定义的UserDetailsServiceOverrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(userService).passwordEncoder(passwordEncoder());}Beanpublic PasswordEncoder passwordEncoder(){return new BCryptPasswordEncoder();} }编写UserService package cn.yanqi.service;import org.springframework.security.core.userdetails.UserDetailsService; //继承 UserDetailsService 重写loadUserByUsername 完成认证 public interface UserService extends UserDetailsService {}import cn.yanqi.travel.mapper.UserMapper; import cn.yanqi.travel.pojo.Role; import cn.yanqi.travel.pojo.UserInfo; import cn.yanqi.travel.service.UserService; 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.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service;import javax.annotation.Resource; import java.util.ArrayList; import java.util.List;Service public class UserServiceImpl implements UserService {Resourceprivate UserMapper userMapper;Resourceprivate PasswordEncoder passwordEncoder;/*** 认证--查询用户* param s* return* throws UsernameNotFoundException*/Overridepublic UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {UserInfo userInfo this.userMapper.findUserByUserName(s);User user new User(userInfo.getUsername(),userInfo.getPassword(),userInfo.getStatus() 0 ? false : true,//校验用户是否开启true, //帐号是否过期 不过期true, //证号 不过期true, //帐号 不锁定getAuthority(userInfo.getRoles()));System.out.println(用户userInfo.getUsername());System.out.println();return user;}/*** 认证--查询用户对应的角色*/private ListSimpleGrantedAuthority getAuthority(ListRole roles) {ListSimpleGrantedAuthority list new ArrayList();for(Role role : roles){System.out.println(对应角色:role.getRoleName());list.add(new SimpleGrantedAuthority(ROLE_role.getRoleName()));}return list;} } 编写UserMapper public interface UserMapper {/*** 通过用户名查询用户* param s* return*/UserInfo findUserByUserName(String s); } 编写UserMapper.xml !--登录认证通过用户名查询用户--resultMap iduserresultMap typeUserInfo autoMappingtrueid propertyid columnid/collection propertyroles ofTypeRole javaTypeList autoMappingtrueid propertyid columnrid//collection/resultMapselect idfindUserByUserName resultMapuserresultMapSELECT*,r.id ridFROMusers u,role r,users_role urWHEREu.id ur.userId ANDr.id ur.roleId ANDu.username #{s}/select注意事项如果登录认证提交出现405是因为通用页面跳转是GetMapping, Security的登录后台跳转需要post请求 把通用页面跳转改为RequestMapping(“{page}”)即可 测试 登录认证-把users表中的status状态修改 0和1进行测试 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-64TQouaV-1692278828419)(day03_springboot综合案例.assets/image-20210517223706124.png)] 权限控制 Spring Security配置类 // EnableGlobalMethodSecurity(jsr250Enabled true) //开启jsr250注解 // EnableGlobalMethodSecurity(securedEnabled true) //开启secured注解 // EnableGlobalMethodSecurity(prePostEnabled true) //开启表达式注解 EnableWebSecurity Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter {//Spring Security配置类 }代码实现 基于方法级别权限控制有三种方式 /*** 查询所有产品* param page* param size* return*/// RolesAllowed({ADMIN,USER}) // JSR-250注解// RolesAllowed(ADMIN) // JSR-250注解// Secured(ROLE_ADMIN) // Secured注解// PreAuthorize(authentication.principal.username jack)//只有jack才可以访问RequestMapping(findAll)public String findAll( Model model,RequestParam(value page,defaultValue 1) Integer page,RequestParam(value size,defaultValue 5) Integer size){PageHelper.startPage(page,size);ListProduct productList this.productService.findAll();PageInfo pageInfo new PageInfo(productList);model.addAttribute(pageInfo, pageInfo);return product-list;}uestMapping(“findAll”) public String findAll( Model model, RequestParam(value “page”,defaultValue “1”) Integer page, RequestParam(value “size”,defaultValue “5”) Integer size){ PageHelper.startPage(page,size);ListProduct productList this.productService.findAll();PageInfo pageInfo new PageInfo(productList);model.addAttribute(pageInfo, pageInfo);return product-list; }
http://www.dnsts.com.cn/news/4736.html

相关文章:

  • 网站做支付需要准备什么东西洛阳电商网站建设
  • 网站色彩搭配技巧wordpress调用指定标签
  • 上海手机网站建设报价北京高端网站建设
  • 网站备案变更主体电话做网站上海
  • 网站根目录在哪wordpress做自主外贸网站和后台费用多少
  • 网站怎么做微信登录钦州seo
  • 如何开发移动网站哪里可以接公司外包业务
  • 企业网站建设该怎么描述抚州 提供网站建站 公司
  • 专业做棋牌网站的中信建设有限责任公司总部在哪
  • 找人做网站网站网站开发与设计是什么
  • 公司宣传网站建设本科专业建设规划
  • 免费建站系统软件推广链接
  • 简答题网站建设步骤手机网站模板 html5
  • 大连公司企业网站建设网站做cpa
  • 建设个网站多少钱企业网站建设报价清单
  • 温州网站建设哪家专业阿里云建设网站好不好
  • 贾汪城乡建设局网站网站建设构架
  • 博山区住房和城乡建设局网站大家都用哪个网站做读书笔记
  • 怎么做阿里巴巴外贸网站太仓建设局网站
  • 长沙做网站找谁单页型网站
  • 临沂网站制作建设网站运营管理教材
  • 网站 视觉冲击网站备案重要吗
  • 企业网站设计制作收费软件开发可以做网站么
  • 一个人怎样做网站百度热搜榜第一
  • 建设论坛网站wordpress做的博客
  • 重庆自助企业建站模板天津地产网站建设
  • 重庆网站建设中心网站创建一般创建哪种类型
  • 选择网站做友情链接的标准一般是淘宝详情页制作
  • 建网站需要什么资料做网站项目
  • 温州电力建设有限公司网站天津网站推广宣传