你的位置:首页 > Java教程

[Java教程]Spring security


安全包括两个主要操作。

  第一个被称为“认证”,是为用户建立一个他所声明的主题。主题一般式指用户,设备或可以在你系统中执行动作的其他系统。

  第二个叫“授权”,指的是一个用户能否在你的应用中执行某个操作,在到达授权判断之前,身份的主题已经由身份验证过程建立。

 

1. 在web.

 <!-- Spring security Filter --> <filter>    <filter-name>springSecurityFilterChain</filter-name>   <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>  </filter>  <filter-mapping>    <filter-name>springSecurityFilterChain</filter-name>   <url-pattern>/*</url-pattern>  </filter-mapping> 

 

获得当前已认证的用户的名字(obtain the name of the currently authenticated user)
 (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();

官方案例如下:

Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();if (principal instanceof UserDetails) { String username = ((UserDetails)principal).getUsername();} else { String username = principal.toString();}

 

访问受保护的资源

 

使用数据库对用户和权限进行管理 

一般来说,我们都有使用数据库对用户和权限进行管理的需求,而不会把用户写死在配置文件里。所以,我们接下来就重点讨论使用数据库对用户和权限进行管理的方法。 

 

通过扩展Spring Security的默认实现来进行用户和权限的管理 

事实上,Spring Security提供了2个认证的接口,分别用于模拟用户和权限,以及读取用户和权限的操作方法。这两个接口分别是:UserDetails和UserDetailsService。

Java代码  

  1. public interface UserDetails extends Serializable {      GrantedAuthority[] getAuthorities();    String getPassword();    String getUsername();    boolean isAccountNonExpired();    boolean isAccountNonLocked();    boolean isCredentialsNonExpired();    boolean isEnabled(); } 

     




 

Java代码  

  1. public interface UserDetailsService {   UserDetails loadUserByUsername(String username)     throws UsernameNotFoundException, DataAccessException; } 

     




非常清楚,一个接口用于模拟用户,另外一个用于模拟读取用户的过程。所以我们可以通过实现这两个接口,来完成使用数据库对用户和权限进行管理的需求。在这里,我将给出一个使用Hibernate来定义用户和权限之间关系的示例。