Spring Security 框架入门 小Demo

1、Spring Security 框架入门 小Demo

 2、pom.xml 依赖
3、web.xml springSecurity配置 Filter
4、spring-Security.xml
//login.html 设置页面不需要登陆也可以访问 相当于白名单
<http pattern="/login.html" security="none"></http>

//页面拦截部分
<!--use-expressions 是否启用SPEL表达式,默认是true-->
<http use-expressions="false">
<!--/**包括这个目录以及这个目录下的所有子目录,都匹配  access="ROLE_User" 角色名称必须以ROLE_开头-->
<!--当前用户必须有当前ROLE_USER的角色,才可访问根目录,以及子目录-->
<intercept-url pattern="/**" access="ROLE_USER"/>
//use-expressions="false"  不配为false
//<intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
//开启表单登陆功能 login-page="登陆页面" default-target-url="登陆成功后的页面"   always-use-default-target="true" 总是跳转到登陆后的默认页面
<form-login login-page="/login.html" default-target-url="/index.html" always-use-default-target="true"/>
//关闭默认的token认证,未关闭前前防止CSRF攻击,不关闭页面必须是jsp页面,可以在自动生成的页面拷贝
<csrf disabled="true"/>
//框架也允许使用iframe,不被拦截

<headers>
<frame-options policy="SAMEORIGIN">
</headers>
//登出
<logout/>

</http>
//认证管理器
<authentication-manager>
//认证的提供方
    <authentication-provider>
      <user-service>
      //authorities 属于那个角色
      <user name="admin" password="123456" authorities="ROLE_USER">
      </user-service>
   </authentication-provider>

</authentication-manager>

5、启动项目会自动生成登录页面
6、自已创建一个登录页面
  <form action="/login" method="post"> 
    <input name="username">
      <input  name="password">

  </from>

  7、显示登录名
  @Controller
  loginController{
  @RequestMapping("/name")
    public Map name(){
     String username=  SecuriryContextHodel.getContext().getAuthentication().getName();
      
    }
  }
___________________________________________________________________
8、密码在数据库中

/**
认证类
*/
public class  UserDEtailsServiceImpl implements UserDetailsService{
//必须实现的方法
 public UserDetails loadUserByUsername(String username) throws UserNameNotFoundException(){
 
 
   //new User(用户名,"密码",拥有的角色)
   //构建一个角色列表
   List<GrantedAuthority> grantAuths=new ArrayList();
   grantAuths.add(new SimpleGrantedAuthority("ROLE_SELLER"));
     return  new User(username,"123456",grantAuths);
  //return null; 密码错误返回null
 }

}

9、springSecurity.xml

//login.html 设置页面不需要登陆也可以访问 相当于白名单
<http pattern="/*.html" security="none"></http>
<http pattern="/seller/add.do" security="none"></http>
//页面拦截部分
<!--use-expressions 是否启用SPEL表达式,默认是true-->
<http use-expressions="false">
<!--/**包括这个目录以及这个目录下的所有子目录,都匹配  access="ROLE_User" 角色名称必须以ROLE_开头-->
<!--当前用户必须有当前ROLE_USER的角色,才可访问根目录,以及子目录-->
<intercept-url pattern="/**" access="ROLE_SELLER"/>
//use-expressions="false"  不配为false
//<intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
//开启表单登陆功能 login-page="登陆页面" default-target-url="登陆成功后的页面"   always-use-default-target="true" 总是跳转到登陆后的默认页面
<form-login login-page="/login.html" default-target-url="/index.html" always-use-default-target="true"/>
//关闭默认的token认证,未关闭前前防止CSRF攻击,不关闭页面必须是jsp页面,可以在自动生成的页面拷贝
<csrf disabled="true"/>

//框架也允许使用iframe,不被拦截
<headers>
<frame-options policy="SAMEORIGIN">
</headers>
//登出
<logout/>

</http>


//认证管理器
<authentication-manager>
//认证的提供方
    <authentication-provider user-service-ref="userDetailService">
    //密码加密用的算法
       <password-encoder ref="passwordEncoder"></password-encoder>
       
   </authentication-provider>
</authentication-manager>


//认证类
<beans:bean id="userDetailService" class="......UserDEtailsServiceImpl">
//使用set注入远程获取service接口实现类,因为用的是dubbox
<beans:property name="sellService" ref="sellerService"> </beans:property>
</beans:bean>


//引入dubbox
<dubbox:application name="此工程名"/>
<dubbox:registry address="zookeeper://zk地址"/>
//远程到注册中心找接口的实现,相当于bean
<dubbox:reference id="sellerService" interface="....sellerServiceImpl"></dubbox:reference>

//登陆时告诉用什么密码加密,密码加密的工具类
<beans:bean id="passwordEncoder" class="....BcryptPasswordEncoder">

10.密码加密
MD5: 加密32位的字符串  不可逆(哈希算法)
伪解谜:通过海量数据

BCrypt加密算法 (60个位数的字符串)
 //密码加密
BcryptPasswordEncoder passwordEncoder=new BcryptPasswordEncoder();
String password=passwordEncoder.encode(user.getPassword());
user.setPassword(password);


 

猜你喜欢

转载自blog.csdn.net/qq_39716220/article/details/85045320