J2EE – zabezpečení webové aplikace

Tento příspěvek popisuje, jak zabezpečit webovou aplikaci napsanou na platformě Java a běžící na aplikačním serveru GlassFish. Cílem bude zabránit přístupu na vybrané stránky těm uživatelům, kteří nemají přidělenou potřebnou roli.

1. Vytvoření databáze

2. Nastavení aplikačního serveru

Tento příspěvek popisuje, jak zabezpečit webovou aplikaci napsanou na platformě Java a běžící na aplikačním serveru GlassFish. Cílem bude zabránit přístupu na vybrané stránky těm uživatelům, kteří nemají přidělenou potřebnou roli.

1. Vytvoření databáze

2. Nastavení aplikačního serveru

<login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login.jsf</form-login-page>
            <form-error-page>/loginError.jsf</form-error-page>
        </form-login-config>
</login-config>

<security-role>
        <description>READWRITE</description>
        <role-name>READWRITE</role-name>
</security-role>
<security-role>
        <description>SUPERWRITE</description>
        <role-name>SUPERWRITE</role-name>
</security-role>
<security-role>
        <description>ADMIN</description>
        <role-name>ADMIN</role-name>
</security-role>

<security-constraint>
        <display-name>Editation</display-name>
        <web-resource-collection>
            <web-resource-name>edit.jsf</web-resource-name>
            <description/>
            <url-pattern>/edit.jsf</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
            <http-method>HEAD</http-method>
            <http-method>PUT</http-method>
            <http-method>OPTIONS</http-method>
            <http-method>TRACE</http-method>
            <http-method>DELETE</http-method>
        </web-resource-collection>
        <auth-constraint>
            <description>vkládat nesmí uživatel read-only</description>
            <role-name>READWRITE</role-name>
            <role-name>SUPERWRITE</role-name>
            <role-name>ADMIN</role-name>
        </auth-constraint>
        <user-data-constraint>
            <description/>
            <transport-guarantee>NONE</transport-guarantee>
        </user-data-constraint>
</security-constraint>

<sun-web-app error-url="">
  <context-root>/SecurityGUI</context-root>
  <security-role-mapping>
    <role-name>ADMIN</role-name>
    <group-name>3</group-name>
  </security-role-mapping>
  <security-role-mapping>
    <role-name>READWRITE</role-name>
    <group-name>1</group-name>
  </security-role-mapping>
  <security-role-mapping>
    <role-name>SUPERWRITE</role-name>
    <group-name>2</group-name>
  </security-role-mapping>
  <class-loader delegate="true"/>
  <jsp-config>
    <property name="keepgenerated" value="true">
      <description>Keep a copy of the generated servlet class' java code.</description>
    </property>
  </jsp-config>
</sun-web-app>

public String getLoginName() {
  Principal principal = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
  if (principal == null) {
    return null;
  } else {
    return principal.getName();
  }
}

@RolesAllowed("manager")
public Country getCountryByIso(String iso) { ... }

@Stateless
@DeclareRoles({"manager", "manager2"})
public class CommonDAOBean implements CommonDAOBeanLocal { … }

context.isCallerInRole("manager");

Like this:

Další témata